2012-03-21 15 views
24

Usé session_start() para iniciar una sesión en PHP, pero cuando mi navegador se cierra, la sesión se ha ido.¿Cómo creo sesiones persistentes en PHP?

¿Cómo utilizo PHP para crear sesiones persistentes que se cierren por el navegador?

+4

suena como un trabajo para las cookies –

Respuesta

51

Consulte el php.ini valor session.cookie_lifetime.

El valor predeterminado de 0 significa finalizar la sesión cuando se cierra el navegador.

Puede anular este valor directamente en php.ini o configurarlo en su aplicación antes de iniciar la sesión con ini_set. Establecerlo en algo mayor que 0 hará que la sesión viva durante ese tiempo.

E.g.

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7); // 7 day cookie lifetime 
session_start(); 

El ejemplo anterior hace que la cookie de sesión que debe ajustar con una caducidad de 7 días desde que se inició la sesión.

Nota: Si se inicia la sesión para todas las páginas web de la misma pieza de código, esto no va a seguir ampliando la expiración de sesión cada vez que se llama a session_start(). La duración de la cookie se establece desde el momento en que se inicia la sesión por primera vez, no en las solicitudes posteriores. Si desea extender la vida útil de una sesión en 7 días a partir de la hora actual, consulte también session_regenerate_id().

Nota adicional: Si su valor session.gc_maxlifetime se establece en algo menor que la longitud de la cookie de sesión, puede tener una situación en la que el usuario no visita el sitio durante 5 días y cuando regresan, la cookie de sesión ya no es válido porque los datos en el servidor se han eliminado. Para remediar esto, también debe configurar el tiempo de vida para que los datos de esta sesión sean al menos tan largos como la duración de la cookie. Como se indica en el manual, puede ser necesario utilizar un session.save_path personalizado para los datos de la sesión que desea persistir más tiempo que el predeterminado. Por lo tanto, su script puede verse así:

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7); 
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7); 
ini_set('session.save_path', '/home/yoursite/sessions'); 
session_start(); 
2

Las sesiones están diseñadas de forma tal que están basadas en "Sesión". En otras palabras, si cierra su navegador (que es esencialmente su sesión), se supone que debe desaparecer.

Puede intentar almacenar los datos de la sesión en una base de datos en lugar de en un archivo. Almacene el ID de la sesión y los datos de la sesión en una tabla. Luego, recuerde el ID de la sesión de la cookie PHPSESSID (de forma predeterminada) y busque los datos de la sesión desde su base de datos.

+1

Almacenar la sesión en la base de datos no hará que la sesión sea persistente si la Cookie se desactiva cuando el navegador se cierra ... dependiendo de cómo haya programado la recolección de basura y los métodos de destrucción pueden estar guardando los datos de la sesión, pero el usuario tendrá una nueva identificación de sesión con los datos de la nueva sesión si maxlife se establece en 0 luego de que el navegador se cierra y se vuelve a abrir. – Snowburnt

2

Recomendaría utilizar cookies y una base de datos si desea una sesión persistente. Almacenamos la identificación del cliente (valor al azar aleatorio de 32 bits) en una cookie y luego hacemos referencia a eso para cargar su información de cliente.

2

Puede iniciar la sesión sin escribir session_start() y se puede iniciar con la galleta como esta

setcookie('PHPSESSID','any id' , any time); 

esto se podría hacer, porque cuando se escribe session_start() y luego tratar de buscar la cookie como esto

print_r($_COOKIE); 

entonces el outpout habrá:

Array ([PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3) 

inténtelo usted mismo