variable una start sesiones sesion que pasar paginas entre ejemplos ejemplo control _session php session

una - ¿Es correcto mi entendimiento de las sesiones de PHP?



session php (3)

Me ha interesado cómo funcionan las sesiones internamente, pero tengo poco conocimiento de C (y no estoy seguro de dónde buscar en la fuente PHP para esto).

Esto es lo que entiendo de las sesiones en este momento:

  1. Cuando inicia una sesión, al usuario se le asigna una identificación de sesión que se almacena en una cookie.
  2. Cuando se guardan los datos de la sesión (a través de $_SESSION ), se almacenan en el sistema de archivos, con la identificación de sesión correspondiente y un tiempo de caducidad.

¿Es esto correcto? Además, ¿cuál es el método en el que se crean las identificaciones de sesión? Supongo que se basa en el tiempo, pero ¿qué ocurre si dos usuarios envían una solicitud al mismo tiempo? ¿Qué métodos existen internamente para evitar que obtengan el mismo ID?

Gracias,


La identificación de la sesión probablemente sea solo una cadena aleatoria de letras y números. También sería extraño que PHP no verificara que es único y, por lo tanto, no puede ser igual para dos usuarios. En cuanto a (1) y (2), diría que estás en lo correcto, pero no he trabajado con PHP recientemente, así que no dudes en no creerme.


Entiendo que el proceso de manejo de la sesión interna es el siguiente:

Cuando se llama a session_start , PHP está buscando un parámetro del cliente que fue enviado a través de POST, GET o en una cookie (dependiendo de la configuración, vea session.use_cookies , session.use_only_cookies , y session.use_trans_sid ) con el nombre de el valor de session.name para usar la ID de sesión de una sesión ya iniciada.

Si encuentra una ID de sesión válida, intenta recuperar los datos de la sesión del almacenamiento (consulte session.save_handler ) para cargar los datos en $_SESSION . Si no puede encontrar una identificación o su uso está prohibido, PHP genera una nueva identificación usando una función hash (ver session.hash_function ) en los datos de una fuente que genera datos aleatorios (ver session.entropy_file ).

Al final del tiempo de ejecución o cuando se llama a session_write_close , los datos de la sesión en $_SESSION se almacenan en el almacenamiento designado.


Mira php_session_create_id en ext / session / session.c en la fuente de php

Dice así:

  • obtener la hora del día
  • obtener dirección IP remota
  • construir una cadena con los segundos y microsegundos de la hora actual, junto con la dirección IP
  • alimentar eso en la función hash de sesión configurada (ya sea MD5 o SHA1)
  • si está configurado, alimente algo de aleatoriedad adicional de un archivo de entropía
  • generar valor de hash final

Entonces, obtener un duplicado es bastante difícil. Sin embargo, debe familiarizarse con el concepto de fijación de sesión, que le permite a un atacante elegir potencialmente el session_id que su objetivo adoptará: consulte Sesiones y cookies para obtener una buena guía.