2012-05-23 28 views
5

que siguieron la respuesta de aquí, pero no funcionó para mí:
Is possible to keep session even after the browser is closed?¿Cómo mantener una sesión abierta después de que el navegador se cerró en PHP?

Este es el código Traté:

$session_life = 2592000; // 30 days 
session_set_cookie_params($session_life); 
session_name('my_cart'); 
session_start(); 
// update the session_life 
setcookie(session_name(),session_id(),time()+$session_life); 

El problema con esto es que cada vez que el navegador es cerrado Aún obtengo una nueva session_id, no la anterior.

Estoy usando una base de datos para almacenar los elementos en 'my_cart' y session_id solo se usa para identificar al usuario y mostrarle su propio carro.

¿Cuál es la mejor manera para mantener vivo el carrito de los usuarios durante 30 días?


Este es el código que terminó con:

$cart_name = "my_cart"; 
$cart_life = 2592000; // 30 days 
session_start(); 
if (isset($_COOKIE[$cart_name])) { 
    session_id($_COOKIE[$cart_name]); 
} 
setcookie($cart_name, session_id(), time()+$cart_life); 
+1

Quizás esta es una trabajo para cookies y no sesiones. – mawburn

+0

Su sesión también puede caducar en el servidor. El parámetro php [session.gc_maxlifetime] (http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime) define el tiempo máximo que la información de la sesión se mantiene antes de que sea basura recogido. –

Respuesta

3

que he tenido que hacer una cosa similar con un sitio que escribí (permitir un período de 30 minutos para un cliente que introduzca un código de)

En lugar de utilizar una cookie (ya que no puede garantizar que el cliente regrese al sitio en el mismo navegador), guardé el tiempo de caducidad del código en el registro del usuario. De esta forma, independientemente del navegador al que accedan desde la página (por ejemplo, desde el móvil, finalizando en un escritorio), siempre caducan al mismo tiempo.

Cuando el cliente vuelve al sitio, que comparan el tiempo actual al tiempo de caducidad y actuar en consecuencia

Como ya se está almacenando la cesta del cliente, añadiría un tiempo de caducidad con el registro y vuelva a ejecutar una comparación cuando el cliente regresa. Es bastante fácil de hacer:

update basket set expiryDateTime=date_add(now(),interval 7 day) where basketID=[xyz] 

Si lo desea, incluso se podría configurar la hora del día que sea un valor estándar (20:00) mediante el uso de un poco más trucos en MySQL

+0

Gracias, pero eso solo funciona cuando el cliente está conectado. También quería permitir que el cliente agregue artículos a la cesta sin tener que registrarse. Además de que ya estoy manteniendo un campo last_update en la base de datos contra el registro del carrito. (Lo que quiero decir es que ya voy a hacer esto para clientes registrados). – user1275136

+0

En ese caso, almacene la cesta en una cookie (como una cadena JSON) con un valor de fecha de caducidad también. Cuando regresen, busque la cookie y expire cualquier artículo que deba ser. Solo asegúrate de que no se almacene información personal en la cookie. Si necesitan registrarse para llegar realmente a la sección de salida/pago, transfiera la información al DB una vez que se hayan registrado exitosamente y solo utilicen el DB desde allí en adelante (es decir, cookie para no registrados, DB para registro) . Esto permitiría buscar el historial de pedidos también. – DaveyBoy

+0

Lo siento, no creo que me hayas entendido. Ya estoy almacenando el carro en la base de datos, y para los clientes registrados, encontraré los carros que poseen de la base de datos. Todo lo que trato de hacer aquí, es que cuando el navegador esté cerrado, persista el session_id desde antes para que los clientes no registrados vean su carrito desde antes. Así que creé una sesión con el nombre de la sesión y la configuré para que expirara en 30 días, pero parece que caduca cuando el navegador está cerrado.¿Qué debo hacer para arreglar eso? Solo necesito el ID de sesión de antes para identificar el carrito que ya está almacenado en la base de datos. gracias – user1275136

Cuestiones relacionadas