0

当用户登录 PHP 时,我正在尝试重置会话 cookie 及其生命周期。这听起来很微不足道,但我仍在努力使它正确。

加载页面时,用户可能已经拥有也可能没有 cookie。如果他有一个,我想删除它并重置 sessionId,如果没有,我会给他一个新的,有适当的生活。session_status()由于我使用的 PHP 版本,我无法使用。

这是我想出的,但是当用户已经拥有会话 cookie 时它不起作用。

if (isset($_COOKIE[session_name()])) setcookie(session_name(), false);
session_set_cookie_params(2678400); // sets cookie life to one month
session_start();
// do stuff

当用户登录时,旧的 cookie 通常会被删除,但session_start()不会传递新的 cookie。有没有一种方法可以强制提供一个新的 cookie 而无需手动实现会话 ID 创建的逻辑?

非常感谢你的帮助

4

2 回答 2

1

您不必在 PHP 端销毁/重新启动会话,只需向客户端发送一个新的 cookie。只需setcookie()再次调用(使用现有的会话 ID),就可以了。

于 2012-05-07T14:12:45.463 回答
0

您可以使用session_destroy()函数销毁与当前会话相关的所有数据,并使用setcookie()函数将您的 cookie 过期日期设置为过去,以触发浏览器中的删除机制。

就像是:

if (isset($_COOKIE[session_name()])) setcookie(session_name(), false);
session_destroy();
setcookie(session_name(), "", time() - 3600);
);
session_start();
// do stuff
于 2012-05-07T13:08:40.230 回答