Menú
Está libre
registrarse
el principal  /  Educación / Donde se almacenan las sesiones de PHP. Sesiones PHP bajo el escalpelo.

Donde se almacenan las sesiones de PHP. Sesiones PHP bajo el escalpelo.

En Internet, puede encontrar miles de tutoriales sobre qué sesiones son para lo que necesitan y cómo trabajar con ellos. Pero, desafortunadamente, después de leerlos, quedan muchas preguntas. En mi opinión, la forma más fácil de resolverlo en todo es ver cómo funcionan las sesiones desde el interior. Esos. Examine los registros de intercambio de navegadores y servidores web, así como ver qué datos se guardan en el lado del cliente y en el lado del servidor.

Después de eso, muchos momentos se vuelven mucho más claros, y el mecanismo en sí es más transparente.

Las sesiones se estudiarán en el siguiente script estándar:

Funciona de la siguiente manera:

Bloque 1. La función Session_Start () crea una nueva sesión o carga la antigua, utilizando el Identificador de sesión de Phsessid único.

Bloque 2. Si logró restaurar la sesión, el valor de $ _Session ["Vistas"] aumenta por uno. Si no, se inicializa por uno.

En teoría, si el soporte de cocción está habilitado en el navegador, el mecanismo debe funcionar y cada vez que se actualiza la página, el valor del medidor aumentará por uno.

Primer script de carga

Encabezados de solicitud

GET / HTTP / 1.1 Host: FiringRange.Local User-Agent: 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 \u003d 0.9, * / *; Q \u003d 0.8 Aceptar-Idioma: RU-EN, RU; Q \u003d 0.8, EN-EEUU; Q \u003d 0.5, EN; Q \u003d 0.3 Aceptar-Coding: Gzip, Deflate Acept-Chart-Chartset : Windows-1251, UTF-8; Q \u003d 0.7, *; Q \u003d 0.7 Conexión: Mantener Alive Cache-Control: Max-EDE \u003d 0

Asqueros

Http / 1.1 200 ok Fecha: Jue, 29 sep 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 \u003d k33en6cccia7125mitj5te4u6; camino \u003d / Caduca: Jue, 19 de noviembre de 1981 08:52:00 GMT Control de caché: sin tienda, no-caché, debe revalidar, post-cheque \u003d 0, pre-cheque \u003d 0 Pragma: Longitud del contenido de no-caché: 58 MANTENIMIENTO: Tiempo de espera \u003d 5, max \u003d 100 Conexión: Tipo de contenido METH-ALIVE: Texto / HTML

Comentario

En la solicitud inicial, el navegador no se ha identificado de ninguna manera, por lo que el mecanismo sesiones PHP. Generó un nuevo identificador de sesión único y le ordenó al navegador crear un grupo en el que se almacenará este mismo identificador.

Servidor lateral

Como resultado del script en el lado del servidor, se crea el sess_k33en6cccia7125mitj5te4u6 del siguiente contenido:

Lado del cliente

En el lado del cliente, se crea Cook Phpsessid, en el que se almacena el valor del identificador único de la sesión.

Nota. Para configuraciones PHP De forma predeterminada, la vida útil de Cook Phpsessid, hasta que el navegador esté cerrado. Esos. Tan pronto como el navegador esté cerrado, se eliminará el cocinero, y la sesión se perderá en consecuencia. La vida útil de la cookie Phpsessid se puede cambiar variando el valor de la sesión. COOKIE_LIFETIME.

El resultado de la obra del script.

Segundo script de carga

Encabezados de solicitud

GET / http / 1.1 host: 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 \u003d 0.9, * / *; Q \u003d 0.8 Idioma: RU-EN, RU; Q \u003d 0.8, EN-US; Q \u003d 0.5, EN; Q \u003d 0.3 Aceptar: codificación: gzip, desinfla Aceptar-Chart: Windows-1251, UTF-8; Q \u003d 0.7, *; Q \u003d 0.7 Conexión: Galleta Mantener Alive: PHPSESSID \u003d K33EN6CCCIA7125MITJ5TE4U6 Caché-Control de caché: Max-Edad \u003d 0

Asqueros

Http / 1.1 200 OK Fecha: Thu, 29 sep 2011 20:49:41 GMT Server: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 expira: JU, 19 nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revalidate, Post-Check \u003d 0, PRE-Check \u003d 0 Pragma: No-Cache Content-Longitud: 58 Keep-Live: Tiempo de espera \u003d 5, MAX \u003d 100 Conexión: Tipo de contenido METH-ALIVE: Texto / HTML

Comentario

El navegador envía un servidor web de FPSESSID COOK utilizando PHP inicializa la matriz de $ _Session con valores del archivo SESS_K33EN6CCGCIA7125MITJ5TE4U6. En consecuencia, en el bloque 2 funciona la rama IF (recta).

Servidor lateral

Como resultado de la operación del script, el contenido del archivo SESS_K33EN6CCGCIA7125MITJ5TE4U6 está cambiando:

Lado del cliente

El cliente no cambia en el cliente.

El resultado de la obra del script.

¿Que sigue?

Las descargas posteriores de la página antes de cerrar el navegador funcionarán por analogía con la forma en que funcionó la segunda carga del script.

Porque La vida útil de COCK se limitó a la sesión actual del navegador, luego de su cierre, se perderá el identificador de sesión único y cuando se reiniciará el proceso continuará en uno nuevo.

Sin embargo, puede volver a la sesión guardada, si especifica explícitamente Phsessid como el parámetro Script:

Volver a la sesión es bastante condicional, porque Como resultado de la operación del script en este caso, no se crea Cook. Encabezados de respuesta del servidor:

Http / 1.1 200 OK Fecha: Thu, 29 sep 2011 21:01:52 GMT Server: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 Vence: Thu, 19 nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revalidate, Post-Check \u003d 0, PRE-Check \u003d 0 Pragma: No-Cache Content-Longitud: 58 Keep-Live: Tiempo de espera \u003d 5, MAX \u003d 100 Conexión: Tipo de contenido METH-ALIVE: Texto / HTML

Esos. Para mantener el trabajo, es de esta sesión a todos los enlaces para ser atribuidos a? Phpsessid \u003d k33en6cccia7125mitj5te4u6.

Nota. Puede especificar PHP para que el identificador de sesión único se transmita solo a través del cocinero. Para hacer esto, instale la sesión. Uso_only_Cookies en valor 1. En este caso, el truco, demostrado anteriormente, no pasará.

Si las cookies están deshabilitadas en el navegador, puede transmitir el ID de sesión a través de los parámetros, como lo hicimos anteriormente. Además, hay un mecanismo en PHP que agregará el parámetro deseado al enlace y agregará campos ocultos en el formulario. El principio de operación es exactamente lo mismo que con las cookies, por lo que no desarmaremos este caso por separado.

Pequeño cuestionario (Preguntas frecuentes)

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

Los datos de la sesión se almacenan en el servidor. De forma predeterminada, se registran en archivos, pero puede especificar su propio mecanismo de almacenamiento de datos de sesión (por ejemplo, utilizando una base de datos). Si desea detalles, consulte la función Session_Set_Save_Handler.

¿Quién genera un identificador de sesión único?

Un identificador de sesión único (PHPSESSID) genera un servidor.

¿Es posible escribir su propio mecanismo de sesiones?

Sí, es bastante posible. Como puede ver, PHP no usa nada sobrenatural: el identificador se guarda entre las solicitudes con cocción, los datos de sesiones se almacenan en los archivos en el servidor.

Por ejemplo, el propio mecanismo de trabajar con sesiones está en el marco popular Codeigniter.

¿Qué tan seguro es el mecanismo de las sesiones?

La sesión se identifica solo con la ayuda de un identificador de sesión único, por lo que en el caso general, el atacante es suficiente para robarlo para confundir al servidor. Tome el script de prueba que usamos anteriormente. Si la apelación es de otra IP (con respecto a la sesión que creó), pero Phsessid se transmitirá igual, entonces la sesión se restaurará con éxito y el contador aumentará del valor guardado anterior.

Proveer defensa adicional Tendrás para ti. Por ejemplo:

  • Puede guardar en los datos de la sesión IP y el cliente del agente de usuario (se almacenará en el lado del servidor), y luego en cada asa es necesario verificar que los valores actuales se coinciden con los guardados. En este caso, debe buscar un compromiso entre la seguridad y la conveniencia del usuario.

    Por ejemplo, si el usuario tiene una IP dinámica y utiliza la sesión para mantener la autorización, pero al mismo tiempo verifique la navegación de la IP, luego con cada cambio de dirección, el usuario tendrá que volver a ingresar el nombre de usuario y la contraseña.

    De manera similar, la cadena del agente de usuario puede variar 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 un identificador cada vez que el script apela (consulte la función session_regenerate_id). Ver el script y el algoritmo de trabajo en la sección puede estar a continuación.

    Nota.Si cree la discusión sobre el sitio web oficial, cuando se vuelva a generar un identificador, los problemas pueden surgir con acceso paralelo a los datos.

Sesiones de trabajo con un identificador de reingeneración en el contexto.

Texto


// Bloque 1.
session_start ();
si(está establecido.($ _Session ["iniciado"]))
session_regenerate_id ();
dEMÁS.
$ _Session ["iniciado"] \u003d cierto.;

// Bloque 2.
si(está establecido.($ _Session ["Vistas"]))
$ _Session ["Vistas"] ++;
dEMÁS.
$ _Session ["Vistas"] \u003d 1;

// Bloque 3.
eco."
< body>
Número de vistas: ". $ _Session [" Vistas "]".

" ;

?>

Como ya se sabe, protocolo HTTP Permite que las aplicaciones web instalen "sesiones", un diálogo entre el cliente y el servidor, y el estado de este diálogo se guarda de la solicitud para solicitar.

El lenguaje PHP, estar en el idioma principal para la programación web, proporciona la capacidad de utilizar el mecanismo de sesión HTTP, aprovechando la mayoría de las preocupaciones al organizar y almacenar estas sesiones. Permítanme recordarle que es necesario trabajar para el mecanismo de las sesiones HTTP:

  • El servidor debe generar un número de sesión único.
  • El número de sesión debe transferirse al cliente (generalmente a través de cookies).
  • El servidor debe poder guardar los datos de la sesión en archivos o en la base de datos, de modo que se puedan restaurar, conocer el número de sesión que el cliente envía el servidor durante las solicitudes posteriores (también por cookies).

En realidad, la única acción que debe tomarse en el programa PHP para que los engranajes del mecanismo de sesiones torcidos sean llame a una función única: session_start (). Esta característica hace todas las acciones necesarias:

  • Comprueba si el cliente no ha enviado el número de la sesión ya existente en la cookie o en los parámetros de solicitud. Si el cliente envió el número de sesión, entonces los datos de esta sesión se cargan desde la ubicación del almacenamiento constante (por ejemplo, el archivo) a la memoria, y el programa está disponible a través de una matriz de $ _Session. Si el cliente no ha enviado el número de sesión o una sesión que 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 una matriz de $ _Session, que en el caso de una nueva sesión estará vacío El número de la sesión recién creada se coloca en el encabezado de respuesta de Set-Cookie Server.
  • Proporciona datos de la sesión de ahorro. Después de que el programa PHP haya procesado la solicitud, estado actual La matriz de $ _Session se almacena en la ubicación del almacenamiento constante para estar disponible una vez más en la siguiente solicitud del cliente.

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

Cuando ingrese por primera vez en esta página, el servidor enviará un navegador de manojo con el número de sesión:

Set-cookie.: Psyssid \u003d 4ftvca7jmmnm04q95r3sdsk6r6; camino \u003d /

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

Un ejemplo más real: inicio de sesión de usuario

La mayoría de las veces se utilizan las sesiones cuando se usa el inicio de sesión del usuario. Al ingresar al sitio, el usuario ingresa el inicio de sesión y la contraseña que comprueba el servidor. Si el inicio de sesión es correcto, el servidor debe recordar los datos del usuario en la sesión, para no pedir más inicio de sesión con la contraseña. En el caso más sencillo, este ejemplo será:

Array ("contraseña" \u003d\u003e "123", "Título" \u003d\u003e "admin",), "usuario" \u003d\u003e matriz ("contraseña" \u003d\u003e "qwe", "title" \u003d\u003e "usuario",),) ; Devolver ISSET ($ usuarios [$ Inicio de sesión])? $ Usuarios [$ Inicio de sesión]: NULL; ) Función GetCurrentUser () ($ Usuario \u003d ISSET ($ _ SESIÓN ["Usuario"]) $ _Session ["Usuario"]: NULL; DEVOLUCIÓN $ USUARIO;) FUNCIÓN SETCULTURENTUSER ($ USUARIO) ($ _SESIÓN ["Usuario"] \u003d $ usuario;)?\u003e

Hola,!
LINK1 REFERENCIA2.

Fuera No has visitado el sitio. Ingrese el inicio de sesión y la contraseña:
Acceso: Contraseña:

Este programa solicita un nombre de usuario y contraseña, y puede iniciar sesión con Iniciar sesión usuario., qwe. o administración., 123 . El usuario colaborado muestra un saludo. El mensaje muestra el mensaje si el nombre de usuario o la contraseña es incorrecta.

Tan pronto como sea posible ir a este "sitio", puede agacharse a través de los enlaces (Link1, Reference2), mientras queda un usuario cerrado.

¿Qué datos se pueden almacenar en sesiones?

Por pHP predeterminado. Tiendas datos de sesión en un archivo temporal como texto. En esto puedes asegurarte de mirar al directorio con temporal. archivos php. Este directorio se especifica en PHPInfo () en el entorno, TEMP. En este directorio encontrará los archivos de la especificación. 4ftvca7jmmnm04q95r3sdsk6r6Donde 4ftvca7jmmnm04q95r3sdsk6r6 es un número de sesión enviado a la cookie. Eche un vistazo a este archivo: si comenzó el primer ejemplo anterior, el archivo será detectado por aproximadamente el contenido: "Valor | I: 2;". Este texto es una presentación serializada de los contenidos de la sesión, donde solo se almacena una variable con el número.

Todos los valores que el programa PHP coloca en una sesión a través de una matriz de $ _Session, al guardar la sesión, convertirse en una especie de texto y luego grabarse en el archivo. El proceso de convertir las variables en el texto se llama "serialización". Por lo tanto, en la sesión, se pueden colocar cualquier dato que PHP pueda ser serializado.

Afortunadamente, en PHP Serialize no solo valores simples Parece que los números y las líneas, pero también estructuras complejas como matrices y objetos:

"; Print_r ($ _ session); echo""$ _Session [" Testarray "] \u003d Array (1, 2, 3," One "," Dos "," Three "," Child "\u003d\u003e Array (5, 6, 7),); $ obj \u003d nuevo stdclass (); $ Obj-\u003e x \u003d 1234; $ obj-\u003e y \u003d 4567; $ _session ["testObject"] \u003d $ obj;

Este ejemplo registrará dichos 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: "One"; 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;)

Almacenamiento de objetos en la sesión.

En la sesión, como puede ver, puede almacenar objetos. Pero, al mismo tiempo, se debe recordar que se mantenga en los objetos de la sesión que se refieren de ninguna manera a sus clases "caseras", o objetos de instancia de sus clases, es necesario que los anuncios de estas clases se realicen hasta la sesión de la sesión ( ) llamada. Es decir, PHP debe conocer la clase antes de que se presente a la mención de la misma cuando se desercializa los datos de la sesión.

Cuando se guardan los objetos, hay situaciones en las que la serialización estándar del objeto por alguna razón es inaceptable o no es posible. En tales casos, es posible implementar la serialización manualmente al declarar los métodos "mágicos" __SLEP () y __wakup () en la clase.

Por cierto, La serialización es posible implementar y "manualmente", y no es necesario guardar / descargar los datos de la sesión. Puede ser necesario cuando algunos datos en la solicitud deben guardarse para su uso posterior, o transferir a través de la red. Funciones que pueden ser útiles cuando Serialize / Desernialización - Serialize (), inservios (), JSON_ENCODE (), JSON_DECODE ().

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

En la sesión es imposible almacenar lo que es imposible serializar. Un ejemplo de tal entidad puede servir a cualquier recurso PHP. Los recursos son conexiones de red, descriptores de archivos abiertos, conexiones de base de datos y algunos otros objetos. El recurso PHP es una referencia al objeto interno en las profundidades de PHP, que no está disponible directamente desde el programa, pero con el que puede trabajar, causando varias funciones PHP. Una especie de "caja negra", cuyo contenido no puede y no debe serializado.

Características adicionales

PHP proporciona a un desarrollador la capacidad de implementar su propio método de almacenamiento de datos de sesión, por ejemplo, en la base de datos. Para hacer esto, debe implementar las funciones que guardarán y descargarán los datos de la sesión de la ubicación de almacenamiento constante. Luego, estas características deben participar en PHP llamando a la función session_set_save_handler.

Para acelerar el proceso de guardar y descargar los datos de la sesión en sitios altamente cargados, se puede usar el servidor memcacached, que almacena los datos en la memoria. El soporte para este método de almacenamiento de sesión está integrado en PHP y está configurado a través del archivo de configuración PHP.INI.

Puede establecer el nombre del parámetro Cookie a través del cual se pasa el número de sesión, lo que indica su nombre, vida, dominio y otros parámetros.

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

Las sesiones en PHP o como datos sobre el usuario que llegaron al sitio o el comprador se guardan cuando se mueven entre las páginas del sitio sin mucha dificultad. La lección es muy importante. Relevante para crear el 95% de los sitios.

¿Qué es una sesión en PHP?

Las sesiones se utilizan para almacenar información de datos temporales (por ejemplo, que el usuario ha ingresado en el sitio) cuando se mueve entre las páginas de un sitio. Al usar sesiones, los datos se almacenan en archivos temporales en el servidor.
La mayoría de las veces, las sesiones (y las cookies también, también) se utilizan al crear tiendas, foros, tablones de anuncios, redes sociales, blogs y otros recursos. La conveniencia del sistema de sesión es mantener la información temporal del usuario / comprador cerrado, los datos sobre los cuales se encuentran en el acceso rápido de un cierto tiempo. La sesión tiene una vida útil natural, hasta que el navegador está cerrado. Si solo cierra la página, al abrir el sitio, los datos del usuario / cliente seguirán disponibles.

Lógica de la sesión

Sesión (o sesión) es un tipo de almacenamiento de datos temporales. Inmediatamente le advierte, vale la pena una pequeña cantidad de datos. Por ejemplo, inicie sesión y la contraseña del usuario de configuración o su número de serie en la base de datos.

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

Archivo index.php.

Session_start (); // Cada archivo en el que desea usar estas sesiones debe al comienzo del código contenga el comando "Start Session"

$ login \u003d "admin";
$ contraseña \u003d "pase";
$ _Session ["Iniciar sesión"] \u003d $ Iniciar sesión; // guardar la variable que contiene inicio de sesión
$ _Session ["contraseña"] \u003d $ contraseña; // guardar la variable que contiene contraseña

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

Archivo example.php. (o cualquier otra página)

Echo "su inicio de sesión". $ _ Session ["Iniciar sesión"]; // saldrá "su administrador de inicio de sesión", aunque en esta página no escribimos datos!
¡Mira, todo es simple!

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

Archivo example.php.

Session_start (); // Ejecutar la sesión de nuevo de nuevo

Desactivar ($ _ session ["iniciar sesión"]); // tan no registrado la variable o "destruida"
Echo "su inicio de sesión". $ _ Session ["Iniciar sesión"]; // saldrá "su inicio de sesión". Ya que lo destruimos en la última línea, entonces no hay datos.

Session_destroy (); // destruir la sesión. Todos los datos, incluyendo $ _Session ["contraseña"] ya no. Cuando están consultando mostrará un error
En general, esta transmisión es similar al método posterior, pero solo ya no debe escribir un gran código de exceso, pero todos los datos transmitidos de la página a la página se almacenan en archivos temporales en el servidor. Repito que las sesiones deben contener pequeñas cantidades de datos, por lo que son apropiadas para el almacenamiento del inicio de sesión / contraseña, la canasta del comprador y otros volúmenes pequeños.

Valores de transferencia o matriz usando la sesión PHP

En la sesión, puede grabar no solo la cadena, sino también una matriz de datos. Simplemente no lo exagere con el volumen de la matriz, ya que todo esto afectará el espacio de ayuno y ocupado en el servidor.

Nuevamente usamos alguna página de inicio. index.php.

Session_start ();

$ r \u003d matriz ("uno", "dos", "tres");

$ _Session ["arr"] \u003d $ r;

En la página donde se mostrará todo.
Guarde los datos en las sesiones y pase por el enlace a otra página, donde se emitirán todos los datos.

Archivo destinatario, Página test.php. Donde abrimos una matriz

Session_start ();
Print_r ($ _ session ["arr"];
// Eliminar
/*
Formación.
\u003d\u003e Uno.
\u003d\u003e Dos.
\u003d\u003e Tres.
*/
?>
Es posible que desee actualizar la lección en la memoria. En general, todo debería ser claro.

Otras características para trabajar con sesiones.

session_unregistrarse (cadena) - Sesión olvida el valor de una variable global dada;
session_destroy () - la sesión se destruye (por ejemplo, si el usuario dejó el sistema presionando el botón de salida);
sESION_SET_COOKIE_PARAMS (INT Lifetime [, Ruta de cadena [, dominio de cadena]]) - Con esta función, puede instalar cuánto tiempo vivirá la sesión, configurando el Unix_Timestamp que determina el tiempo de muerte de la sesión.

Lista de características para trabajar con sesiones (sesión) en PHP
session_cache_expire: devuelve el final de la acción de caché actual
Session_cache_limiter - recibe y / o establece Limitador de Cashet Cashet
Session_commit - alias session_write_close ()
Session_DECODE - Decodifica los datos de sesión de la línea
session_destroy - destruye todos los datos registrados para la sesión
Session_Encode: encripta los datos de la sesión actual como una cadena
session_get_cookie_params - obtiene la sesión de configuración de cocinero
session_id - obtiene y / o establece la identificación de la sesión actual
session_is_registrado: determina si la variable está registrada en la sesión
session_module_name - obtiene y / o establece el módulo de sesión actual
session_name - obtiene y / o establece el nombre de la sesión actual
session_regenerate_id: modifica el identificador de la sesión actual generado recientemente
Session_register: registra una o más variables para la sesión actual.
session_save_path - obtiene y / o establece la ruta de guardar la sesión actual
session_set_cookie_params - establece los parámetros de la sesión de cocción
Session_set_save_handler: establece las características de almacenamiento de la sesión de nivel de usuario
SESION_START - Inicializa los datos de la sesión
Session_unRegister - Relisters una variable de la sesión actual
Session_unset - libera todas las variables de sesión
Session_write_close - escribe datos de sesión y sesión final

Ejemplos de sesiones

Página Ver contador durante la sesión. Ejemplo de Vite. Sin embargo, después de cerrar el navegador, la cuenta regresiva comenzará de nuevo.

Algunos metros de visitas de página como parte de una sesión

// Un ejemplo simple de usar sesiones sin cookies.
session_name ("prueba");
session_start ();
$ _Session ["cuenta"] \u003d @ $ _ SESIÓN ["CUENTA"] + 1;
?>

Encimera


En la sesión de trabajo actual con el navegador, abrió esta página.
Una vez).
Cierre el navegador para restablecer este medidor.
Haga clic aquí para actualizar la página!
En cada transición, el contador aumentará por 1)

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

Las sesiones en PHP son un mecanismo para ahorrar en el lado del servidor de información de la computadora del cliente. De hecho, la sesión en PHP no es un tema tan difícil, sino por su comprensión, debe conocer el principio de las cookies de trabajo en PHP. Por lo tanto, si no sabe cómo funciona la cookie en PHP, primero leía el artículo apropiado, y luego regresa aquí.

La palabra Sesión del inglés se traduce como una sesión, por lo que el sentido de las sesiones en PHP se vuelve más comprensible, pero el término "sesión", y lo usaremos en este artículo.

Las sesiones en PHP son muy similares a la cookie, los mismos pares son el valor clave \u003d\u003e Valor, solo se almacenan en el lado del servidor.

Session_start ()

Sesión Necesitamos comenzar, para esto hay una función de session_start (). Esta función inicia una sesión, o una sesión, ya que puede llamarlo.

La función Session_Start () es deseable llamar al principio de la página, pero en mis ejemplos no hago esto.

Array $ _Session.

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

Para garantizar que se utiliza la interacción de cada visitante con sus datos de su sesión. archivo de cookie, la creación de la cual PHP se da, no necesitas estar preocupado por eso. Esta cookie solo importa para el servidor y no se puede utilizar para obtener los 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 de $ _Session. Para preservar la variable en la sesión, debe asignar un valor en esta matriz.

Finalmente comencemos a usar ejemplos. Todo es muy simple.

Sesiones en PHP. valor. ";?\u003e\u003e

Ahora intentemos obtener un valor de una matriz $ _Session en otro ejemplo.

Sesiones en PHP.

Nota, Si en el segundo ejemplo, eliminamos la función Session_Start (), no tendremos acceso a los datos de la matriz de $ _SESSION.

ID DE SESIÓN ()

Después de crear la sesión, accede automáticamente al identificador de sesión único utilizando la función Session_ID (). Esta característica le permite especificar y recibir 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 hacer esto, presione CTRL + MAYÚS + i, luego los recursos, y encontrará una cookie), este dominio puso su navegador de cookies con el nombre de FSESSSID y aproximadamente un valor de este tipo: "7g5df9rkd1hhvr33lq1k6c72p7".

De acuerdo con el valor de PHPSESSID que definirá su navegador y trabajará con el conjunto correspondiente de variables que estarán disponibles para el script a través de la matriz de $ _Session, como ya está escrito anteriormente.

Función Session_Name ()

Si las funciones Session_ID () le permiten obtener el valor del identificador de sesión, la función Session_Name () le permite encontrar el nombre de la sesión.

Sesiones en PHP.

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

Ahora sabemos más sobre el Prozhanismo de las Sesiones en PHP y debe volver a la función Session_Start () nuevamente. Esta característica inicializa el mecanismo de sesión para el usuario actual. Como exactamente esto sucede:

  • Si el usuario inició el sitio por primera vez, la sesión_start () establece la cookie del cliente y crea un almacenamiento temporal en el servidor asociado con la ID de usuario.
  • Especifica el repositorio asociado con el identificador de corriente transmitido.
  • Si hay datos en el repositorio en el servidor, se colocan en una matriz de $ _Session.
  • Si se enciende Register_Globals del archivo php.ini, entonces todos los elementos de la matriz de $ _Session se transforman en variables globales.

Un ejemplo de usar la sesión

Ahora veremos un ejemplo que permitirá experimentos menores con sesiones.

Sesiones en PHP.

Encimera

En la sesión actual abrió la página. hora.

Abra un ejemplo en "\u003e esta pestaña.

Todo el trabajo de las sesiones se basa en una matriz $ _Session, se ve claramente en este ejemplo.

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

Finalización de la sesión

Para completar la sesión, necesitamos:

  1. Clear $ _Session Array.
  2. Eliminar almacenamiento temporal en el servidor.
  3. Eliminar cookie de sesión.

Clear Massive $ _Session puede estar 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 una cookie de sesión utilizando la función SetCookie (), que estudiamos en un estudio con cookie en PHP.

Ejemplo de finalización de la sesión:

Finalización de la sesión

Se completa la sesión.

Ahora puede realizar un experimento: ejecute un ejemplo con un medidor en una ventana, enrolle el mostrador y luego ejecute un ejemplo con la eliminación de la sesión y renovará la página con el medidor.

Eliminar el archivo de cookies se puede hacer así:

setCookie (Session_Name (), "", Time () - 60 * 60 * 24 * 32, "/")

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

Las funciones de session_name () y session_id () son raras en la práctica, pero estoy escribiendo sobre ellos, ya que el artículo debe ser revelado por el mecanismo de operación de sesiones en PHP.

Usando estas funciones, puede especificar sus propios nombres e identificadores de sesiones, pero no se recomienda hacer esto. Si quisiera establecerlos, luego escriba estas funciones con argumentos antes de la función Session_Start (), como en el siguiente ejemplo:

Sesiones en PHP.

Al usar este ejemplo, todos los usuarios se les asignará el mismo identificador de sesión.

Deteneremos más detalles si comienza un 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), en cada navegador tendrá su propia sesión única. identificador. Los navegadores almacenan cookies cada una en su carpeta, por lo que la función Session_Start () le dará a cada navegador para crear su propio identificador único y, en consecuencia, para cada navegador se creará un almacenamiento único en el servidor. Por lo tanto, un ejemplo con un medidor (esto) en cada navegador funcionará independientemente entre sí.

Si especifica el mismo identificador de sesión para todos los usuarios, funcionarán con un repositorio en el servidor. Aquí hay un ejemplo de un contador que considerará visitas de diferentes navegadores:

100) (session_unset (); session_destroy ();)?\u003e Sesiones en PHP.

Contador número 2.

Abrió la página en diferentes navegadores. hora.

Abra un ejemplo en "\u003e esta pestaña.

Si ejecuta este ejemplo, no es un hecho que verá una unidad allí. Otros visitantes ya podrían cambiar los valores en el almacenamiento de la sesión en el servidor. Cuando en este caso, el servidor elimina el repositorio: no lo sé, por lo que cuando se excede el medidor, el valor de 100 completará la sesión.

Estableciendo 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 () se encuentra con el cliente, una cookie.

La vida útil de la sesión se puede cambiar utilizando la función session_set_cookie_params (), aquí está su sintaxis.

session_set_cookie_params (int Lifetime [, ruta de cadena [, dominio de cadena [, Bool Secure]]]])

En la práctica, es suficiente usar solo el primer parámetro (por vida), anote el tiempo en segundos, lo que determina cuántos servidores deben recordar el estado de la sesión después de que se cierre el navegador.

La función session_set_cookie_params () se aplica solo para el período del script.

Aquí hay un ejemplo de usar esta función:

Sesiones en PHP.

Contador número 3.

Valor del contador:.

Abra el medidor en "\u003e esta pestaña.

Atornille el contador y cierre el navegador, después de 30 Sukund nuevamente, abra este ejemplo. Su sesión continuará.