Diferencia entre revisiones de «Plantilla:PHP/Inaem/Sesiones»
(→Creando la sesión) |
|||
Línea 96: | Línea 96: | ||
</source> | </source> | ||
{{Tip|Una vez creada la sesión podemos almacenar/consultar información de la misma consultando la variable superglobal '''''$_SESSION'''''}} | {{Tip|Una vez creada la sesión podemos almacenar/consultar información de la misma consultando la variable superglobal '''''$_SESSION'''''}} | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Eliminando la sesión=== | ===Eliminando la sesión=== | ||
Línea 109: | Línea 105: | ||
;session_destroy. | ;session_destroy. | ||
Elimina completamente la información de la sesión del dispositivo de almacenamiento. | Elimina completamente la información de la sesión del dispositivo de almacenamiento. | ||
+ | {{Tip| Cuando se hace un cambio de estado (login, cambio de permisos, ...): regenerar id. | ||
+ | session_regenerate_id() | ||
+ | }} | ||
+ | |||
{{Lectura|Title=Documentación| | {{Lectura|Title=Documentación| | ||
− | * http://www.php.net/manual/es/ | + | * http://www.php.net/manual/es/booSek.session.php |
* http://www.w3schools.com/php/php_sessions.asp | * http://www.w3schools.com/php/php_sessions.asp | ||
* http://www.mclibre.org/consultar/php/lecciones/php_sesiones.html | * http://www.mclibre.org/consultar/php/lecciones/php_sesiones.html | ||
+ | }} | ||
+ | ===Actividades=== | ||
+ | {{MRM_Actividad|Title=Contador de accesos a una página| | ||
+ | *Haz un programa que cuente el número de visitas a una página en una misma sesión | ||
+ | *A la página podremos acceder por la url o haciendo un click en un botón de tipo submit | ||
+ | <!--[[Usuario:ManuelRomero/ProgramacionWeb/php/Aut_Ses_Coo/ejercicios#Cuenta de visitas|Cuenta Visitas]]--> | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Contador de acceso a un usuario| | ||
+ | *En este caso queremos contar cuantas veces accede un determinado usuario a nuestra página | ||
+ | *El programa visualizará en cada acceso el número total de accesos de cada usuario, indicando su nombre y número de acceso. | ||
+ | <!--[[Usuario:ManuelRomero/ProgramacionWeb/php/Aut_Ses_Coo/ejercicios#Cuenta de visitas|Cuenta Visitas]]--> | ||
+ | }} | ||
+ | {{Actividad|Title = Programa una pequeña agenda| | ||
+ | *Es una aplicación para mantener una pequeña agenda en una '''''única''''' página web programada en PHP. | ||
+ | |||
+ | *La agenda almacenará únicamente dos datos de cada persona: su nombre y un número de teléfono. Además, no podrá haber nombres repetidos en la agenda. | ||
+ | |||
+ | *En la parte superior de la página web se mostrará el contenido de la agenda. En la parte inferior debe figurar un sencillo formulario con dos cuadros de texto, uno para el nombre y otro para el número de teléfono. | ||
+ | |||
+ | *Cada vez que se envíe el formulario: | ||
+ | |||
+ | #Si el nombre está vacío, se mostrará una advertencia. | ||
+ | #Si el nombre que se introdujo no existe en la agenda, y el número de teléfono no está vacío, se añadirá a la agenda. | ||
+ | #Si el nombre que se introdujo ya existe en la agenda y se indica un número de teléfono, se sustituirá el número de teléfono anterior. | ||
+ | #Si el nombre que se introdujo ya existe en la agenda y no se indica número de teléfono, se eliminará de la agenda la entrada correspondiente a ese nombre. | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Control de acceso| | ||
+ | *En este caso queremos mostrar un formulario con nombre y password ("alumno", "password") | ||
+ | *Dejamos solamente 3 intentos seguidos para acceder | ||
+ | *En caso de el intento sea incorrecto, mostraremos un mensaje "Datos incorrectos, le quedan X intentos" | ||
+ | *En caso de que insertemos correctamente iremos a una página llamado sitio.php donde mostraremos un mensaje de bienvenida y el nombre de la persona que accede | ||
+ | *Será posible navegar a una segunda página llamada productos.php donde se mostrará otro mensaje con el nombre del usuario | ||
+ | *Desde la segunda página se podrá cerrar sesión, en cuyo caso deberemos de pasar a la primer página | ||
+ | *Estas dos páginas solo deberá de ser posible acceder si nos hemos logueado, si no, no nos dejará, mostrando un mensaje y reenviándonos a la página index.php en 3 segundos. | ||
+ | {{Plegable|hide|Css para el login| | ||
+ | <source lang=css> | ||
+ | #login fieldset { | ||
+ | position: absolute; | ||
+ | left: 50%; | ||
+ | top: 50%; | ||
+ | width: 230px; | ||
+ | margin-left: -115px; | ||
+ | height: 160px; | ||
+ | margin-top: -80px; | ||
+ | padding:10px; | ||
+ | border:1px solid #ccc; | ||
+ | background-color: #eee; | ||
+ | } | ||
+ | |||
+ | #login legend { | ||
+ | font-family : Arial, sans-serif; | ||
+ | font-size: 1.3em; | ||
+ | font-weight:bold; | ||
+ | color:#333; | ||
+ | } | ||
+ | </source>}} | ||
+ | }} | ||
+ | |||
+ | |||
+ | |||
+ | |||
}} | }} | ||
</div> | </div> |
Revisión de 03:08 7 feb 2017
|
Ideas generales de las sesiones
- A diferencia de las cookies, las variables de sesión se almacenan en el servidor
- Tienen un tiempo limitado de existencia.
- Para identificar al usuario que generó las variables de sesión, el servidor genera una clave única que es enviada al navegador y almacenada en una cookie.
- Luego, cada vez que el navegador solicita otra página al mismo sitio, envía esta cookie (clave única) con la cual el servidor identifica de qué navegador proviene la petición y puede rescatar de un archivo de texto las variables de sesión que se han creado.
- Cuando han pasado 20 minutos sin peticiones por parte de un cliente (navegador) las variables de sesión son eliminadas automáticamente (se puede configurar el entorno de PHP para variar este tiempo).
- Una variable de sesión es más segura que una cookie ya que se almacena en el servidor.
- No tiene que estar enviándose continuamente como sucede con las cookies.
- Cuando el navegador del cliente está configurado para desactivar las cookies las variables de sesión, tienen forma de funcionar (enviando la clave como parámetro en cada hipervínculo).
- Desventaja: ocupa espacio en el servidor.
SSID de la sesión
Estas ideas son transparentes para el programador, no las tenemos que controlar, pero por higiene intelectual en la programación web, conviene conocer que
- Existen dos maneras de mantener el SSID de la sesión
- Utilizando cookies, tema ya visto.
- Propagando el SID en un parámetro de la URL. El SID se añade como una parte más de la URL, de la forma:
http://www.misitioweb.com/tienda/listado.php&PHPSESSID=34534fg4ffg34ty
- En el ejemplo anterior, el SID es el valor del parámetro PHPSESSID.
En php todas estas acciones se realizan de forma transparente para el programador, es decir, como desarrolladores podemos directamente utilizar las sesiones en php sin necesidad de tener que transmitir el SSID. Directemente php nos ofrece supervariables y funciones para gestionarlo.
Configuración
Existen una serie de directivas para configurar las sesiones, que conviene conocer. Como toda configuración tendemos a mantener su estado por defecto, lo cual es relativamente cómodo, pero no siempre práctico.
- Estas se pueden consultar viendo phpinfo(), y modificar en el fichero de configuración de php, php.ini
- Para ver todas las directivas http://es.php.net/manual/es/session.configuration.php
- Algunas directivas de configuración que pueden resultar de interés
- session.use_cookies
- Indica si se deben usar cookies (1) o propagación en la URL (0) para almacenar el SID.
- session.use_only_cookies
- Se debe activar (1) cuando utilizas cookies para almacenar los SID, y además no quieres que se reconozcan los SID que se puedan pasar como parte de la URL (este método se puede usar para usurpar el identificador de otro usuario).
- session.save_handler
- Se utiliza para indicar a PHP cómo debe almacenar los datos de la sesión del usuario. Existen cuatro opciones: en ficheros (files), en memoria (mm), en una base de datos SQLite (sqlite) o utilizando para ello funciones que debe definir el programador (user). El valor por defecto (files) funcionará sin problemas en la mayoría de los casos.
- session.name
- Determina el nombre de la cookie que se utilizará para guardar el SID. Su valor por defecto es PHPSESSID.
- session.auto_start
- Su valor por defecto es 0, y en este caso deberás usar la función session_start() para gestionar el inicio de las sesiones. Si usas sesiones en el sitio web, puede ser buena idea cambiar su valor a 1 para que PHP active de forma automática el manejo de sesiones. No obstante por seguridad mejor hacerlo de forma explícita cuando lo necesites
- session.cookie_lifetime
- Si utilizas la URL para propagar el SID, éste se perderá cuando cierres tu navegador. Sin embargo, si utilizas cookies, el SID se mantendrá mientras no se destruya la cookie. En su valor por defecto (0), las cookies se destruyen cuando se cierra el navegador. Si quieres que se mantenga el SID durante más tiempo, debes indicar en esta directiva ese tiempo en segundos.
- session.gc_maxlifetime
- Indica el tiempo en segundos que se debe mantener activa la sesión, aunque no haya ninguna actividad por parte del usuario. Su valor por defecto es 1440. Es decir, pasados 24 minutos desde la última actividad por parte del usuario, se cierra su sesión automáticamente.
Creando la sesión
De forma colocial
Tip: A veces se queda la sesión abierta por temas de cache o de la cookie que mantiene el id de sesión
<?php sesion_start(); $_SESSION['nombre']='manuel'; .... ?> *Ahora hemos establecido la variable de sesión '''''nombre''''' *De esta forma en futuras navegaciones mientras dure la sesión o conversación entre el usuario cliente y el servidor podré acceder a la variable de sesion '''nombre''' puedo acceder *En otro fichero php podré acceder al valor del nombre del usuario <?php sesion_start(); ... $usuario = $_SESSION['nombre']; .... ?> Tip: Una vez creada la sesión podemos almacenar/consultar información de la misma consultando la variable superglobal $_SESSION
Eliminando la sesión
Elimina completamente la información de la sesión del dispositivo de almacenamiento. Tip: Cuando se hace un cambio de estado (login, cambio de permisos, ...): regenerar id.
session_regenerate_id()
Actividades
|