[Pregunta]: Comportamiento de las $_SESSION

Iniciado por Leguim, 2 Agosto 2021, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

En relación a su tiempo de vida las sesiones en php me están dando un problema y es que a veces de la nada me cierra la sesión y me manda para el index.

Código (php) [Seleccionar]

ini_set('session.cookie_lifetime', 43200); // (12 hours)
ini_set('session.gc_maxlifetime', 43200); // (12 hours)


¿Será que el comportamiento sería que cuando una $_SESSION es inicializada desde ese punto hasta 12 horas INDEPENDIENTEMENTE de si cierro sesión va a esperar 12 horas para destruirla y por eso me está sacando sin que yo le diga? Pensaba que al cerrar sesión ese tiempo de vida quedaba inutilizable porque ya cerraba sesión, se eliminaban las sesiones.

En la parte del código cuando hago logout tengo unset($_SESSION['x']); y más abajo session_destroy();

EDIT: Se me pasó que esto va al foro de PHP

Danielㅤ

#1
Hola, hasta donde tengo entendido, las cookies de sesión se destruyen al cerrar el navegador aunque le quede tiempo de vida, no es que va a esperar 12 horas para destruirse si ya al cerrar el navegador no tiene sentido que esa cookie de sesión exista, justamente por eso son cookies de sesión porque al crearlas se inicia una sesión con una cookie y al cerrar el navegador, la sesión se termina, es decir la cookie se destruye, porque sería:

Cerrar el navegador = Terminar/cerrar la sesión = La cookie de sesión la destruye el mismo navegador cuando se cierra

Ahora en el caso que vos quieras seguir usando una cookie después de que el navegador se cierra y se vuelve a abrir, entonces podes usar cookies permanentes.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

MinusFour

#2
Eh, si tu destruyes la sesión te genera una nueva sesión si vuelves a visitar el sitio. A menos que el visitante no vuelva a visitar el sitio después de haber cerrado la sesión. Entonces si tu cierras la sesión por ejemplo a las 2 de la tarde, vuelves a visitar el sitio inmediatamente (se genera una sesión nueva) y te autentificas al día siguiente a las 12... la cookie expira a las 2 por lo que te "sacaría" del sitio (la sesión probablemente siga ahí). Dando la apariencia que solo ha durado 2 horas.

Si quieres puedes usar:

Código (php) [Seleccionar]

session_regenerate_id();


Una vez que te hayas autentificado. De esta forma la cookie también debería regenerarse para obtener otras 12 horas.

Edit: Realmente no se genera una sesión después de destruirse una vez que revisites el sitio, aquí lo que me refiero es que muy probablemente tengas session_start en varios archivos que estos a su vez generan una sesión nueva.

Leguim

Cita de: MinusFour en  2 Agosto 2021, 22:35 PM
Eh, si tu destruyes la sesión te genera una nueva sesión si vuelves a visitar el sitio. A menos que el visitante no vuelva a visitar el sitio después de haber cerrado la sesión. Entonces si tu cierras la sesión por ejemplo a las 2 de la tarde, vuelves a visitar el sitio inmediatamente (se genera una sesión nueva) y te autentificas al día siguiente a las 12... la cookie expira a las 2 por lo que te "sacaría" del sitio (la sesión probablemente siga ahí). Dando la apariencia que solo ha durado 2 horas.

Si quieres puedes usar:

Código (php) [Seleccionar]

session_regenerate_id();


Una vez que te hayas autentificado. De esta forma la cookie también debería regenerarse para obtener otras 12 horas.

Edit: Realmente no se genera una sesión después de destruirse una vez que revisites el sitio, aquí lo que me refiero es que muy probablemente tengas session_start en varios archivos que estos a su vez generan una sesión nueva.

Seguramente sea eso!
Voy a probar a ver si se me cierra la sesión, igualmente para estar seguro esa función sesión regenerate se usaría luego de las instrucciones cuando se hace login? (Digamos dejar esa función para lo último luego de crear los distintos arreglos $_SESSION['x'] y después de eso uso esa función correcto?

MinusFour

Justo después que autentificas y antes de tocar cualquier cosa de la sesión de preferencia.