Menú
Está libre
registro
hogar  /  Educación/ Dónde se almacenan las sesiones php. Sesiones PHP bajo el bisturí

Dónde se almacenan las sesiones de php. Sesiones PHP bajo el bisturí

Hay miles de tutoriales en Internet sobre qué son las sesiones, para qué sirven y cómo trabajar con ellas. Pero, lamentablemente, después de leerlos, aún quedan muchas preguntas. En mi opinión, la forma más sencilla de entenderlo todo es ver cómo funcionan las sesiones desde dentro. Aquellos. examinar los registros de intercambio del navegador y el servidor web, y también ver qué datos se almacenan en el lado del cliente y del servidor.

Después de eso, muchos puntos se vuelven mucho más comprensibles y el mecanismo de operación en sí se vuelve más transparente.

Estudiaremos el trabajo de las sesiones utilizando el siguiente guión estándar:

Funciona así:

Bloque 1. La función session_start () crea una nueva sesión o carga una antigua usando el identificador de sesión único PHPSESSID.

Bloque 2. Si se restauró la sesión, se incrementa el valor de $ _SESSION ["vistas"]. Si no es así, se inicializa a uno.

En teoría, si la compatibilidad con cookies está habilitada en el navegador, el mecanismo debería funcionar y cada vez que se actualice la página, el valor del contador aumentará en uno.

Primera carga del guion

Solicitar encabezados

GET / HTTP / 1.1 Host: firingrange.local Usuario-Agente: Mozilla / 5.0 (Windows NT 5.1; rv: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, * / *; q = 0.8 Accept-Language: ru-ru, ru; q = 0.8, en-us; q = 0.5, en; q = 0.3 Accept-Encoding: gzip, deflate Accept-Charset : windows-1251, utf-8; q = 0.7, *; q = 0.7 Conexión: Keep-Alive Cache-Control: max-age = 0

Encabezados de respuesta

HTTP / 1.1 200 OK Fecha: Jue, 29 de Septiembre de 2011 20:36:15 GMT Servidor: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Set-Cookie: PHPSESSID = k33en6ccgcia7125mitj5te4u6; ruta = / Caduca: Jue, 19 de noviembre de 1981 08:52:00 GMT Control de caché: sin almacenamiento, sin caché, debe revalidar, verificación posterior = 0, verificación previa = 0 Pragma: sin caché Contenido-Longitud: 58 Keep-Alive: tiempo de espera = 5, máx. = 100 Conexión: Keep-Alive Tipo de contenido: texto / html

Un comentario

En la solicitud original, el navegador no se identificó de ninguna manera, por lo que el mecanismo Sesiones PHP generó un nuevo identificador de sesión único y le dijo al navegador que creara una cookie en la que se almacenará este identificador.

Lado del servidor

Como resultado del script en el lado del servidor, se crea el archivo sess_k33en6ccgcia7125mitj5te4u6 con el siguiente contenido:

Lado del cliente

En el lado del cliente, se crea una cookie PHPSESSID, que almacena el valor del identificador de sesión único.

Nota. A Configuración de PHP De forma predeterminada, la duración de la cookie PHPSESSID es hasta que se cierra el navegador. Aquellos. Tan pronto como se cierre el navegador, la cookie se eliminará y, en consecuencia, se perderá la sesión. La duración de la cookie PHPSESSID se puede cambiar variando el valor session.cookie_lifetime.

El resultado del guión

Segunda carga de script

Solicitar encabezados

GET / HTTP / 1.1 Anfitrión: firingrange.local Agente de usuario: Mozilla / 5.0 (Windows NT 5.1; rv: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, * / *; q = 0.8 Aceptar-Idioma: ru-ru, ru; q = 0.8, en-us; q = 0.5, en; q = 0.3 Aceptar codificación: gzip, desinflar Aceptar-Juego de caracteres: windows-1251, utf-8; q = 0.7, *; q = 0.7 Conexión: cookie de mantenimiento: PHPSESSID = k33en6ccgcia7125mitj5te4u6 Cache-Control: max-age = 0

Encabezados de respuesta

HTTP / 1.1 200 OK Fecha: Jue, 29 de Septiembre de 2011 20:49:41 GMT Servidor: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Caduca: Jue, 19 de Noviembre 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 Pragma: no-cache Content-Length: 58 Keep-Alive: timeout = 5, máx. = 100 Conexión: Keep-Alive Tipo de contenido: texto / html

Un comentario

El navegador envía la cookie PHPSESSID al servidor web, que PHP usa para inicializar la matriz $ _SESSION con los valores de sess_k33en6ccgcia7125mitj5te4u6. En consecuencia, en el bloque 2, se cumple la rama IF (directa).

Lado del servidor

Como resultado de la operación del script, el contenido del archivo sess_k33en6ccgcia7125mitj5te4u6 cambia:

Lado del cliente

Nada cambia del lado del cliente.

El resultado del guión

¿Que sigue?

Las cargas posteriores de la página antes de cerrar el navegador funcionarán de manera similar a como lo hizo la segunda carga del script.

Porque la vida útil de la cookie estuvo limitada por la sesión actual del navegador, luego, una vez cerrada, el identificador de sesión único se perderá y el proceso comenzará de nuevo cuando se reinicie.

Sin embargo, puede volver a la sesión guardada especificando explícitamente PHPSESSID como parámetro de secuencia de comandos:

Volver a la sesión es bastante arbitrario, ya que como resultado del trabajo del script, no se crea una cookie en este caso. Encabezados de respuesta del servidor:

HTTP / 1.1 200 OK Fecha: Jue, 29 de Septiembre de 2011 21:01:52 GMT Servidor: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Caduca: Jue, 19 de Noviembre 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 Pragma: no-cache Content-Length: 58 Keep-Alive: timeout = 5, máx. = 100 Conexión: Keep-Alive Tipo de contenido: texto / html

Aquellos. para seguir trabajando con esta sesión en particular, tendrá que asignar? PHPSESSID = k33en6ccgcia7125mitj5te4u6 a todos los enlaces.

Nota. Puede decirle a PHP que solo pase el identificador de sesión único a través de la cookie. Para hacer esto, configure session.use_only_cookies en 1. En este caso, el truco demostrado anteriormente no funcionará.

Si las cookies están deshabilitadas en el navegador, entonces puede pasar el identificador de sesión a través de los parámetros, como hicimos anteriormente. Además, PHP tiene un mecanismo que a su vez agregará el parámetro requerido a los enlaces y agregará campos ocultos a los formularios. El principio de funcionamiento es exactamente el mismo que con las cookies, por lo que no analizaremos este caso por separado.

Pequeño cuestionario (preguntas frecuentes)

¿Dónde se almacenan físicamente los datos de la sesión?

Los datos de la sesión se almacenan en el servidor. De forma predeterminada, se escriben en archivos, pero puede definir su propio mecanismo para almacenar datos de sesión (por ejemplo, utilizando una base de datos). Para obtener más detalles, consulte la función session_set_save_handler.

¿Quién genera el ID de sesión único?

El servidor genera el identificador de sesión único (PHPSESSID).

¿Puedo escribir mi propio mecanismo de sesión?

Sí, es bastante posible. Como puede ver, PHP no usa nada sobrenatural: el identificador se guarda entre solicitudes mediante cookies, los datos de la sesión se almacenan en archivos en el servidor.

Por ejemplo, el popular framework CodeIgniter tiene su propio mecanismo para trabajar con sesiones.

¿Qué tan seguro es el mecanismo de sesión?

Una sesión se identifica solo por un identificador de sesión único, por lo que, en general, un atacante solo necesita robarlo para confundir al servidor. Tomemos el script de prueba que usamos anteriormente. Si se va a acceder desde una IP diferente (en relación a la que creó la sesión), pero el PHPSESSID se transmitirá igual, entonces la sesión se restaurará con éxito y el contador aumentará desde el valor guardado anteriormente.

Proveer protección adicional tú mismo. Por ejemplo:

  • Puede guardar las sesiones de IP y User-Agent del cliente en los datos de la sesión (se almacenarán en el lado del servidor), y luego, con cada llamada, verificar que los valores actuales coincidan con los guardados. En este caso, debe encontrar un compromiso entre la seguridad y la experiencia del usuario.

    Por ejemplo, si un usuario tiene una IP dinámica y usa sesiones para mantener la autorización, pero al mismo tiempo verifica la coincidencia de IP, entonces cada vez que cambia la dirección, el usuario tendrá que volver a ingresar el nombre de usuario y la contraseña.

    Asimismo, la cadena Usuario-Agente puede cambiar al actualizar la versión del navegador o al instalar algunos complementos.

  • Uno de los mecanismos de protección de sesión recomendados es volver a generar el identificador cada vez que se llama al script (consulte la función session_regenerate_id). Puede ver el script y el algoritmo de trabajo en el contexto a continuación.

    Nota. Si cree en la discusión en el sitio web oficial, cuando se vuelva a generar el identificador, pueden surgir problemas con el acceso simultáneo a los datos.

Trabajo de sesiones con regeneración del identificador en el contexto

Texto


// bloque 1
session_start ();
si(Está establecido($ _SESSION ["iniciado"]))
session_regenerate_id ();
demás
$ _SESSION ["iniciado"] = cierto;

// bloque 2
si(Está establecido($ _SESSION ["vistas"]))
$ _SESSION ["vistas"] ++;
demás
$ _SESSION ["vistas"] = 1;

// bloque 3
eco"
< body>
Número de visualizaciones: ". $ _SESSION [" visualizaciones "]".

" ;

?>

Como tu ya sabes, Protocolo HTTP permite que las aplicaciones web establezcan "sesiones": un diálogo entre un cliente y un servidor, y el estado de este diálogo se conserva de una solicitud a otra.

El lenguaje PHP, siendo el lenguaje principal para la programación web, brinda la capacidad de utilizar el mecanismo de sesión HTTP, asumiendo la mayoría de las preocupaciones al organizar y almacenar datos de sesión. Permítame recordarle lo que se requiere para que funcione el mecanismo de sesión HTTP:

  • El servidor debe generar un número de sesión único.
  • El número de sesión debe transmitirse al cliente (generalmente a través de Cookies).
  • El servidor debe poder guardar los datos de la sesión en archivos o en una base de datos para que se pueda restaurar, conociendo el número de sesión que el cliente envía al servidor en posteriores solicitudes (también a través de Cookies).

En realidad, la única acción que debe realizarse en un programa PHP para que los engranajes del mecanismo de sesión giren es llamar a una sola función: session_start (). Esta función realiza todos los pasos necesarios:

  • Comprueba si el cliente ha enviado un número de sesión ya existente en la Cookie o en los parámetros de solicitud. Si el cliente ha enviado un número de sesión, los datos de esta sesión se cargan desde una ubicación de almacenamiento permanente (por ejemplo, un archivo) en la memoria y están disponibles para el programa a través de la matriz $ _SESSION. Si el cliente no ha enviado un número de sesión o dicha sesión no existe en el servidor, se crea una nueva sesión con un nuevo número, y sus datos también están disponibles a través de la matriz $ _SESSION, que estará vacía en el caso de una nueva sesión. El número de la sesión recién creada se coloca en el campo de encabezado de la respuesta del servidor Set-Cookie.
  • Proporciona almacenamiento de datos de la sesión. Una vez que el programa PHP ha procesado la solicitud, Estado actual La matriz $ _SESSION se almacena en una ubicación persistente para estar disponible nuevamente en la próxima solicitud del cliente.

Ahora, conociendo los detalles detrás de session_start (), podemos jugar con este mecanismo. El siguiente ejemplo almacena un número en la sesión, que aumenta en uno con cada solicitud del cliente:

Cuando visite esta página por primera vez, el servidor enviará al navegador una cookie con el número de sesión:

Set-Cookie: PHPSESSID = 4ftvca7jmmnm04q95r3sdsk6r6; ruta = /

Y el navegador enviará el mismo número de sesión al servidor con cada solicitud posterior. Ahora, si borra las cookies en el navegador, se creará una nueva sesión con un número diferente en el servidor y la cuenta en nuestro script de prueba comenzará de nuevo.

Un ejemplo más del mundo real: nombre de usuario

La mayoría de las veces, las sesiones se utilizan cuando un usuario inicia sesión en el sitio. Al ingresar al sitio, el usuario ingresa un nombre de usuario y contraseña, que el servidor verifica. Si el inicio de sesión es correcto, entonces el servidor debe recordar los datos del usuario en la sesión, para no volver a solicitar un inicio de sesión con contraseña. En el caso más simple, obtienes el siguiente ejemplo:

matriz ("contraseña" => "123", "título" => "Administrador",), "usuario" => matriz ("contraseña" => "qwe", "título" => "Usuario",),) ; return isset ($ usuarios [$ inicio de sesión])? $ usuarios [$ inicio de sesión]: nulo; ) function getCurrentUser () ($ user = isset ($ _ SESSION ["user"])? $ _SESSION ["user"]: null; return $ user;) function setCurrentUser ($ user) ($ _SESSION ["usuario"] = $ usuario;)?>

Oye,!
Enlace1 Enlace2

DesconectarseAún no ha entrado en el sitio. Ingrese nombre de usuario y contraseña:
Acceso: Contraseña:

Este programa solicita un nombre de usuario y contraseña, y puede ingresar con un nombre de usuario usuario, qwe o administración, 123 ... Se muestra un saludo al usuario que ha iniciado sesión. Al iniciar sesión, se muestra un mensaje si el nombre de usuario o la contraseña son incorrectos.

Tan pronto como logre ingresar a este "sitio", puede hacer clic en los enlaces (Enlace1, Enlace2), sin dejar de ser un usuario registrado.

¿Qué datos se pueden almacenar en una sesión?

Por PHP predeterminado almacena los datos de la sesión en un archivo temporal como texto. Puede verificar esto buscando en el directorio con temporal Archivos PHP... Este directorio está listado en phpinfo () bajo Entorno, TEMP. En este directorio encontrará archivos como sess_ 4ftvca7jmmnm04q95r3sdsk6r6, donde 4ftvca7jmmnm04q95r3sdsk6r6 es el número de sesión pasado en la cookie. Eche un vistazo a este archivo: si ejecuta el primer ejemplo anterior, el archivo contendrá aproximadamente el siguiente contenido: "valor | i: 2;". Este texto es una representación serializada del contenido de la sesión, donde solo se almacena una variable con un número.

Todos los valores que el programa PHP pone en la sesión a través de la matriz $ _SESSION se convierten a formato de texto cuando se guarda la sesión y luego se escriben en un archivo. El proceso de convertir los valores de las variables en texto se llama "serialización". Por lo tanto, cualquier dato que PHP sea capaz de serializar se puede colocar en una sesión.

Afortunadamente, en PHP, puede serializar más que solo valores simples como números y cadenas, pero también estructuras complejas como matrices y objetos:

"; print_r ($ _ SESSION); echo""; $ _SESSION [" testArray "] = matriz (1, 2, 3," uno "," dos "," tres "," hijo "=> matriz (5, 6, 7),); $ obj = nuevo stdClass (); $ obj-> x = 1234; $ obj-> y = 4567; $ _SESSION ["testObject"] = $ obj;

Este ejemplo escribirá los siguientes datos en el archivo de sesión:

TestArray | a: 7: (i: 0; i: 1; i: 1; i: 2; i: 2; i: 3; i: 3; s: 3: "uno"; i: 4; s: 3 : "dos"; i: 5; s: 5: "tres"; s: 5: "niño"; a: 3: (i: 0; i: 5; i: 1; i: 6; i: 2; i: 7;)) testObject | O: 8: "stdClass": 2: (s: 1: "x"; i: 1234; s: 1: "y"; i: 4567;)

Almacenar objetos en una sesión

Como puede ver, los objetos se pueden almacenar en una sesión. Pero debe recordarse que al almacenar objetos en la sesión que se refieran de alguna manera a sus clases "auto-hechas", u objetos-instancias de sus clases, es necesario que la declaración de estas clases se realice antes de la llamada a session_start (). Es decir, PHP debe conocer la clase antes de encontrar una mención de ella al deserializar los datos de la sesión.

Al guardar objetos, hay situaciones en las que la serialización estándar de un objeto por alguna razón es inaceptable o incluso imposible. En tales casos, puede implementar manualmente la serialización declarando los métodos mágicos __sleep () y __wakeup () en la clase.

por cierto, la serialización se puede realizar "manualmente" y no es necesario guardar / cargar datos de la sesión. Esto puede ser necesario cuando es necesario guardar algunos datos de la aplicación para usarlos más tarde o transferirlos a través de la red. Las funciones que pueden ser útiles para la serialización / deserialización son serialize (), unserialize (), json_encode (), json_decode ().

¿Qué no se puede almacenar en una sesión?

Una sesión no puede almacenar algo que no se pueda serializar. Cualquier recurso PHP puede servir como ejemplo de dicha entidad. Los recursos son conexiones de red, descriptores de archivos abiertos, conexiones de bases de datos y algunos otros objetos. Un recurso PHP es una referencia a un objeto interno en las profundidades de PHP que no es directamente accesible desde el programa, pero que puede manipularse llamando a varias funciones PHP. Una especie de "caja negra", cuyo contenido no puede ni debe serializarse.

Características adicionales

PHP proporciona al desarrollador la capacidad de implementar su propia forma de almacenar datos de sesión, por ejemplo, en una base de datos. Para hacer esto, necesita implementar funciones que guardarán y cargarán los datos de la sesión desde una ubicación de almacenamiento permanente. Entonces necesitas decirle a PHP sobre estas funciones llamando a la función session_set_save_handler.

Para acelerar el proceso de guardar y cargar datos de la sesión en sitios muy cargados, se puede utilizar un servidor Memcached, que almacena datos en la memoria. El soporte para este método de almacenamiento de sesiones está integrado en PHP y se configura a través del archivo de configuración php.ini.

Puede establecer el nombre del parámetro de la cookie, a través del cual se transmite el número de sesión, especificando su nombre, duración, dominio y otros parámetros.

Estas y muchas otras opciones para personalizar sesiones HTTP en PHP están disponibles a través de las funciones session_ *.

Sesiones en PHP o cómo se guardan los datos sobre un usuario o cliente que ha ingresado al sitio al navegar entre las páginas del sitio sin mucha dificultad. La lección es muy importante. Relevante para la creación del 95% de los sitios.

¿Qué es sesión en php?

Las sesiones se utilizan para almacenar información sobre datos temporales (por ejemplo, que el usuario ha ingresado al sitio) cuando navega entre páginas del mismo sitio. Cuando se utilizan sesiones, los datos se guardan en archivos temporales en el servidor.
La mayoría de las veces, las sesiones (y las cookies, por cierto, también) se utilizan al crear tiendas en línea, foros, tableros de mensajes, redes sociales, blogs y otros recursos. La conveniencia del sistema de sesión consiste en almacenar la información temporal del usuario / cliente registrado, cuyos datos están en acceso rápido durante un tiempo determinado. La sesión tiene una fecha de vencimiento natural, hasta que se cierra el navegador. Si cierra solo la página, cuando abra el sitio, los datos sobre el usuario / comprador seguirán estando disponibles.

Lógica de la sesión

La sesión (o sesión) es una especie de almacenamiento temporal de datos. Te advierto de inmediato que vale la pena guardar una pequeña cantidad de datos. Por ejemplo, el nombre de usuario y la contraseña del usuario que inicia sesión o su número de serie en la base de datos.

Ejemplo de trabajo
1. El usuario ingresa un nombre de usuario y contraseña e ingresa al sitio
2. Los datos con nombre de usuario y contraseña se guardan en la sesión de una de las páginas del sitio:

Expediente index.php

Session_start (); // cada archivo en el que desee utilizar datos de sesión debe contener el comando "iniciar sesión" al comienzo del código

$ login = "admin";
$ contraseña = "pase";
$ _SESSION ["inicio de sesión"] = $ inicio de sesión; // guarda la variable que contiene el inicio de sesión
$ _SESSION ["contraseña"] = $ contraseña; // guarda la variable que contiene la contraseña

3. Cuando vaya a otra página del sitio, estos datos también estarán disponibles:

Expediente ejemplo.php(o cualquier otra página)

Echo "Su inicio de sesión". $ _ SESSION ["inicio de sesión"]; // mostrará "Su nombre de usuario es administrador", ¡aunque no registramos datos en esta página!
¡Mira, es simple!

4. Si desea borrar los datos de la sesión, es suficiente:

Expediente ejemplo.php

Session_start (); // "iniciar la sesión" de nuevo

No establecido ($ _ SESSION ["iniciar sesión"]); // así es como se eliminó el registro o se "destruyó" la variable
echo "Su inicio de sesión". $ _ SESSION ["inicio de sesión"]; // mostrará "Su inicio de sesión". Como lo destruimos en la última línea, tampoco hay datos.

Session_destroy (); // destruye la sesión. Todos los datos, incluido $ _SESSION ["contraseña"], desaparecieron. Cuando se solicite, se mostrará un error
En general, dicha transferencia es similar al método POST, pero ya no tiene que escribir mucho código innecesario y todos los datos transferidos de una página a otra se almacenan en archivos temporales en el servidor. Nuevamente, las sesiones deben contener pequeñas cantidades de datos, por lo que son adecuadas para almacenar nombre de usuario / contraseña, carrito de compras y otros volúmenes pequeños.

Pasando un valor o matriz usando una sesión PHP

En una sesión, puede escribir no solo una cadena, sino también una matriz de datos. Simplemente no exagere con el tamaño de la matriz, ya que todo esto afectará el rendimiento y el espacio ocupado en el servidor.

Usamos una determinada página de inicio nuevamente index.php

Session_start ();

$ r = matriz ("uno", "dos", "tres");

$ _SESSION ["arr"] = $ r;

A la página donde se muestra todo
Guardamos los datos en la sesión y seguimos el enlace a otra página, donde mostraremos todos los datos.

Destinatario del archivo, página test.php donde abrimos la matriz

Session_start ();
print_r ($ _ SESSION ["arr"]);
// saldrá
/*
Formación
=> uno
=> dos
=> tres
*/
?>
Es posible que desee repasar un tutorial sobre. En general, todo debe quedar claro.

Otras funciones para trabajar con sesiones

session_unregister (cadena)- la sesión olvida el valor de la variable global especificada;
session_destroy ()- la sesión se destruye (por ejemplo, si el usuario ha abandonado el sistema presionando el botón de cierre de sesión);
session_set_cookie_params (int duración [, ruta de la cadena [, dominio de la cadena]])- al usar esta función, puede establecer cuánto tiempo durará la sesión configurando unix_timestamp, que determina la hora de muerte de la sesión.

Lista de funciones para trabajar con sesiones (sesión) en php
session_cache_expire - Devuelve el vencimiento del caché actual
session_cache_limiter - Obtiene y / o establece el límite de caché actual
session_commit - un alias para session_write_close ()
session_decode: decodifica los datos de la sesión de la cadena
session_destroy: destruye todos los datos registrados para la sesión
session_encode: cifra los datos de la sesión actual como una cadena
session_get_cookie_params - Obtiene los parámetros de la cookie de sesión
session_id: obtiene y / o establece la identificación de la sesión actual
session_is_registered: determina si una variable está registrada en la sesión
session_module_name - Obtenga y / o instale el módulo para la sesión actual
session_name - obtiene y / o establece el nombre de la sesión actual
session_regenerate_id: modifica la identificación de la sesión actual con la recién generada
session_register: registra una o más variables para la sesión actual
session_save_path: obtiene y / o establece la ruta para guardar la sesión actual
session_set_cookie_params - establece los parámetros de la cookie de sesión
session_set_save_handler - establece funciones de almacenamiento de sesión a nivel de usuario
session_start - inicializa los datos de la sesión
session_unregister: anula el registro de una variable de la sesión actual
session_unset: libera todas las variables de sesión
session_write_close: escribe los datos de la sesión y el final de la sesión

Ejemplos de sesiones

El contador de páginas vistas durante la sesión. Un ejemplo ilustrativo de trabajo. Sin embargo, después de cerrar el navegador, la cuenta regresiva comenzará de nuevo.

Contador de visitas a una página en una sesión

// Un ejemplo simple de uso de sesiones sin cookies.
session_name ("prueba");
session_start ();
$ _SESSION ["count"] = @ $ _ SESSION ["count"] + 1;
?>

Encimera


En la sesión actual de trabajo con el navegador, ha abierto esta página.
tiempo (s).
Cierre su navegador para restablecer este contador.
¡Haga clic aquí para actualizar la página!
Con cada transición, el contador aumentará en 1)

¡Gracias por la atención! ¡Buena suerte en tus esfuerzos!

Las sesiones en PHP son un mecanismo para almacenar información sobre la computadora del cliente en el lado del servidor. De hecho, las sesiones en PHP no son un tema tan difícil, pero para entenderlo, necesita saber cómo funcionan las cookies en PHP. Entonces, si no sabe cómo funcionan las cookies en PHP, primero lea el artículo correspondiente y luego vuelva aquí.

La palabra sesión del inglés se traduce como sesión, por lo que el significado mismo de sesiones en PHP se vuelve más claro, pero el término "sesiones" se ha quedado entre los programadores y lo usaremos en este artículo.

Las sesiones en PHP son muy similares al mecanismo de las cookies, los mismos pares clave => valor, solo que se almacenan en el lado del servidor.

Función Session_start ()

Necesitamos iniciar la sesión, para esto existe la función session_start (). Esta función inicia una sesión, o sesión, como se llame.

Es deseable llamar a la función session_start () al principio de la página, pero en mis ejemplos no lo hago.

$ _SESSION matriz

Las sesiones son grupos de variables que se almacenan en el servidor pero se refieren a un visitante único. Nuevamente, este es el punto clave: las sesiones se almacenan en el servidor.

Para asegurar la interacción de cada visitante con sus datos de su sesión, se utiliza archivo de cookies, el comando para crear que PHP se da a sí mismo, no necesita preocuparse por ello. Esta cookie solo es significativa para el servidor y no se puede utilizar para recuperar datos del usuario.

En el servidor, los datos de la sesión se almacenan en Archivo de texto y están disponibles en el programa PHP en la matriz $ _SESSION. Para guardar una variable en una sesión, debe asignarle un valor en esta matriz.

Por fin comencemos a usar ejemplos. Todo es muy sencillo.

Sesiones en PHP valor. ";?>

Ahora intentemos obtener el valor de la matriz $ _SESSION en otro ejemplo.

Sesiones en PHP

Tenga en cuenta que si en el segundo ejemplo eliminamos la función session_start (), entonces no tendremos acceso a los datos de la matriz $ _SESSION.

Función Session_id ()

Una vez creada la sesión, accedes automáticamente al identificador de sesión único mediante la función session_id (). Esta función le permite establecer y obtener el valor del identificador de sesión.

Sesiones en PHP

Puede buscar en la barra de herramientas para los desarrolladores de su navegador (en Chrome para esto, presione Ctrl + Shift + I, luego Recursos, y allí encontrará una cookie), este dominio puso una cookie para su navegador con el nombre PHPSESSID y algo así: "7g5df9rkd1hhvr33lq1k6c72p7".

Es por el valor de PHPSESSID que el servidor determinará su navegador y trabajará con el conjunto apropiado de variables que estarán disponibles para el script a través de la matriz $ _SESSION, como se mencionó anteriormente.

Función Session_name ()

Si la función session_id () le permite obtener el valor del identificador de sesión, la función session_name () le permite averiguar el nombre de la sesión.

Sesiones en PHP

Una vez más sobre la función session_start ()

Ahora sabemos más sobre la confusión de sesiones en PHP y necesitamos volver a la función session_start () nuevamente. Esta función inicializa el mecanismo de sesión para el usuario actual. ¿Cómo sucede exactamente esto?

  • Si el usuario ha iniciado el sitio por primera vez, session_start () establece una cookie en el cliente y crea un almacenamiento temporal en el servidor asociado con la identificación del usuario.
  • Define la tienda asociada con el identificador actual pasado.
  • Si hay datos almacenados en el servidor, se colocan en la matriz $ _SESSION.
  • Si register_globals del archivo php.ini está activado, entonces todos los elementos de la matriz $ _SESSION se convierten en variables globales.

Ejemplo de uso de sesión

Ahora veremos un ejemplo que te permitirá experimentar un poco con las sesiones.

Sesiones en PHP

Encimera

En la sesión actual, ha abierto la páginauna vez.

Abra el ejemplo en "> esta pestaña.

Todo el trabajo de las sesiones se basa en la matriz $ _SESSION, esto se ve claramente en este ejemplo.

Si cierra la ventana del navegador, la sesión terminará, nuestro contador se restablecerá a cero. Este comportamiento de las sesiones en PHP se puede cambiar, volveremos a este tema un poco más adelante en el artículo.

Fin de sesión

Para finalizar la sesión, necesitamos:

  1. Limpia la matriz $ _SESSION.
  2. Elimina el almacenamiento temporal en el servidor.
  3. Eliminar cookie de sesión.

Puede borrar la matriz $ _SESSION usando la función session_unset ().

La función session_destroy () elimina el almacenamiento temporal en el servidor. Por cierto, ella no hace nada más.

Debe eliminar la cookie de sesión utilizando la función setcookie (), que aprendimos en la lección sobre cómo trabajar con cookies en PHP.

Ejemplo de final de sesión:

Fin de sesión

La sesión ha terminado.

Ahora puede realizar un experimento: ejecute el ejemplo con un contador en una ventana, termine el contador y luego ejecute el ejemplo eliminando la sesión y vuelva a actualizar la página con el contador.

Eliminar una cookie se puede hacer así:

setcookie (nombre_sesión (), "", tiempo () - 60 * 60 * 24 * 32, "/")

Una vez más sobre las funciones session_name () y session_id ()

Las funciones session_name () y session_id () rara vez se usan en la práctica, pero estoy escribiendo sobre ellas, ya que el artículo necesita revelar el mecanismo mismo de las sesiones en PHP.

Puede utilizar estas funciones para definir sus propios nombres e ID de sesión, pero no se recomienda. Si desea establecerlos, escriba estas funciones con argumentos antes de la función session_start (), como en el siguiente ejemplo:

Sesiones en PHP

Con este ejemplo, a todos los usuarios se les asignará el mismo ID de sesión.

Detengámonos aquí con más detalle, si ejecuta el ejemplo de la sección sobre la función session_name () (aquí está el enlace) en diferentes navegadores (por ejemplo, en Chrome e Internet Explorer), entonces cada navegador tendrá su propia sesión única identificador. Los navegadores almacenan cookies cada uno en su propia carpeta, por lo que la función session_start () le dará a cada navegador su propio identificador único y, en consecuencia, se creará un almacenamiento único en el servidor para cada navegador. Por lo tanto, el ejemplo del contador (este) funcionará de forma independiente en cada navegador.

Si establece el mismo identificador de sesión para todos los usuarios, estos trabajarán con el mismo repositorio en el servidor. A continuación, se muestra un ejemplo de un contador que contará las visitas de diferentes navegadores:

100) (inicio_sesión (); destrucción_sesión ();)?> Sesiones en PHP

Contador número 2

Abrió la página en diferentes navegadores.una vez.

Abra el ejemplo en "> esta pestaña.

Si ejecuta este ejemplo, no es un hecho que verá una unidad allí. Es posible que otros visitantes ya hayan cambiado los valores en el almacén de sesiones en el servidor. No sé cuándo el servidor elimina el almacenamiento en este caso, por lo que si el contador supera los 100, terminaré la sesión.

Establecer el tiempo de espera

De forma predeterminada, la sesión "vive" hasta que el visitante cierra la ventana del navegador. Esto se debe al hecho de que la función session_start () establece una cookie de este tipo para el cliente.

La duración de la sesión se puede cambiar usando la función session_set_cookie_params (), aquí está su sintaxis.

session_set_cookie_params (int tiempo de vida [, ruta de cadena [, dominio de cadena [, bool seguro]]])

En la práctica, es suficiente usar solo el primer parámetro (vida útil), aquí se escribe el tiempo en segundos, lo que determina cuánto debe recordar el servidor el estado de la sesión después de cerrar el navegador.

La función session_set_cookie_params () se aplica solo a la duración del script.

Aquí hay un ejemplo usando esta función:

Sesiones en PHP

Contador No. 3

Valor del contador:.

Abrir contador en "> esta pestaña.

Dale cuerda al contador y cierra el navegador, luego de 30 segundos abre este ejemplo nuevamente. Tu sesión se guardará.