5

我按照这里的答案,但它对我不起作用:
即使在浏览器关闭后也可以保持会话?

这是我尝试过的代码:

$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);

这样做的问题是,每次关闭浏览器时,我仍然会得到一个新的 session_id,而不是旧的。

我正在使用数据库将项目存储在“my_cart”中,而 session_id 仅用于识别用户以向他们展示自己的购物车。

让用户购物车存活 30 天的最佳方法是什么?


这是我最终得到的代码:

$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);
4

1 回答 1

3

我不得不对自己编写的网站做类似的事情(允许客户在 30 分钟内输入代码)

我没有使用 cookie(因为您不能保证客户会在同一个浏览器中返回网站),而是根据用户记录存储了代码的到期时间。这样,无论他们从哪个浏览器访问页面(例如,从移动设备开始,在桌面上结束),它们总是会同时过期。

当客户返回站点时,我将当前时间与到期时间进行比较并采取相应措施

由于您已经存储了客户的购物篮,我会根据记录添加到期时间,然后在客户返回时进行比较。这很容易做到:

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

如果您愿意,您甚至可以通过在 MySQL 中使用更多技巧将一天中的时间设置为标准值 (20:00)

于 2012-05-23T13:58:20.420 回答