查看关于设置cookie的php文档,我看到我可以设置cookie的过期日期.您可以将cookie设置为在浏览器会话结束时或将来的某个时间到期,但我没有看到将cookie设置为永不过期的方法.这是否可能,这是如何实现的?
我从这里听到了答案,但它对我不起作用:
即使在浏览器关闭后仍可以保持会话吗?
这是我试过的代码:
$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);
Run Code Online (Sandbox Code Playgroud)
这个问题是,每次浏览器关闭时,我仍然会得到一个新的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);
Run Code Online (Sandbox Code Playgroud) PHP 网站使用 cookie 在浏览器端存储会话 ID。目标是在最近的用户与站点交互后的特定时间段内,PHP 会话将被视为有效。
PHP 会话有两个不同的超时:
PHP 内置逻辑仅在第一次session_start()调用时发送 cookie ,即生成会话 ID。cookie 不会在进一步请求时发送,因此 cookie 过期时间永远不会延长。
与此相反,每次请求都会延长 PHP 会话到期时间。
因此,如果用户持续与站点交互,PHP 会话过期时间会延长,但 cookie 过期时间保持其原始值。
例子:
时间点/PHP 会话过期/cookie 过期
1 / 6 / 6
2 / 7 / 6
4 / 9 / 6
如何强制 PHP 在每个(或几乎每个)请求上更新 cookie 的过期时间?最佳做法是什么? …