【问题标题】:Reset cookie life and session Id in PHP在 PHP 中重置 cookie 生命周期和会话 ID
【发布时间】:2012-05-07 22:12:45
【问题描述】:

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

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

这是我想出的,但当用户已经拥有会话 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 而无需手动实现 session id 创建的逻辑?

非常感谢您的帮助

【问题讨论】:

    标签: php session-cookies


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这种方式容易多了。对于那些想知道我是如何实现它的人:if (isset($_COOKIE[session_name()])) setcookie(session_name(), $_COOKIE[session_name()], time() + 2678400); else session_set_cookie_params(2678400);
    • @Mad 这是在 session_start 之后吗?
    【解决方案2】:

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

    类似:

    if (isset($_COOKIE[session_name()])) setcookie(session_name(), false);
    session_destroy();
    setcookie(session_name(), "", time() - 3600);
    );
    session_start();
    // do stuff
    

    【讨论】:

    • 嗯,谢谢,但我不太确定它是否可以工作。 session_destroy() 应该在 session_start() 之后调用。在我写的内容中,我成功地删除了存在的 cookie,但我无法提供新的。您的代码还会删除现有的 cookie,但也不会为已登录的用户提供新的 cookie...在 session_destroy() 之前调用 session_start() 不足以使其正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    相关资源
    最近更新 更多