Plantilla:PHP/Sesiones
De WikiEducator
Revisión a fecha de 01:59 23 dic 2016; ManuelRomero (Discusión | contribuciones)
|
SSID de la sesión
- 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. Directemnte php nos ofrece supervariables y funciones para gestionarlo.
Configuración
- Existen una serie de directivas para configurar las sesiones, que conviene conocer
- 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
- 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.
- 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
- En función de como esté configurado la directiva session.auto_start
- Si esta activada, la sesión comienza automáticamente al conectarse a un sitio
- Si no está activada la iniciaremos con la funcion session_start();
Tip: Una vez creada la sesión podemos almacenar/consultar información de la misma consultando la variable superglobal $_SESSION
|
Tip: Cuando se hace un cambio de estado (login, cambio de permisos, ...): regenerar id.
session_regenerate_id()
Eliminando la sesion
- se puede configurar para que de forma automática se eliminen los datos de una sesión pasados un determinado tiempo
- También podemos actuar directamente sobre una sesión eliminando información
- session_unset.
- Elimina las variables almacenadas en la sesión actual, pero no elimina la información de la sesión del dispositivo de almacenamiento usado.
- session_destroy.
Elimina completamente la información de la sesión del dispositivo de almacenamiento.
Ejercicios:
|
<? session_start(); if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; } ?> <html> <head> <title>Contar páginas vistas por un usuario en toda su sesión</title> </head> <body> <? echo "Desde que entraste has visto " . $_SESSION["cuenta_paginas"] . " páginas"; ?> <br> <br> <a href="otracuenta.php">Ver otra página</a> </body> </html>
}}
Tip: Cuando se hace un cambio de estado (login, cambio de permisos, ...): regenerar id.
session_regenerate_id()
- Una vez creada la sesión podemos almacenar/consultar información de la misma consultando la variable superglobal $_SESSION
{{Ejemplo
<?php // Iniciamos la sesión o recuperamos la anterior sesión existente session_start(); // Comprobamos si la variable ya existe if (isset($_SESSION['visitas'])) $_SESSION['visitas']++; else $_SESSION['visitas'] = 0; ?>
}}
- Ahora almacenemos el instante en el que se produce cada visita
<?php // Iniciamos la sesión o recuperamos la anterior sesión existente session_start(); // En cada visita añadimos un valor al array "visitas" $_SESSION['visitas'][] = mktime(); ?>
Eliminando la sesión
- se puede configurar para que de forma automática se eliminen los datos de una sesión pasados un determinado tiempo
- También podemos actuar directamente sobre una sesión eliminando información
- session_unset.
- Elimina las variables almacenadas en la sesión actual, pero no elimina la información de la sesión del dispositivo de almacenamiento usado.
- session_destroy.
Elimina completamente la información de la sesión del dispositivo de almacenamiento.