【问题标题】:php session_destroy() setcookie time()php session_destroy() 设置cookie时间()
【发布时间】:2014-08-04 04:46:40
【问题描述】:

example on php.net中使用session_destroy(),它指定删除一个cookie:

if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
}

42000秒应该改吗?一个人应该使用什么价值?我不记得在我的会话中设置了任何 cookie,但我相信 php.ini 已将其设置为默认使用 cookie。

【问题讨论】:

    标签: php session-cookies


    【解决方案1】:

    PHP 默认设置 cookie。当您在 PHP 中创建 session 时,PHP 将生成相应的会话 ID,并在 HTTP 标头中的请求中来回传递该 ID。这就是服务器知道哪些会话数据与特定用户相关联的方式。

    您无需更改42000。这个数字的意义是将cookie设置为过期时间。通过这样做,浏览器将删除相应的 cookie,删除对服务器上存储的会话数据的引用,从而“清除”会话。

    服务器上的会话数据将在稍后由 PHP 垃圾收集器根据您的 php.ini 配置文件中指定的时间删除。

    以下是安装 PHP 时使用的默认会话配置设置的参考。

    参考:Session Configuration Settings

    【讨论】:

    • session_destroy() 不首先删除会话数据吗?
    • @sjagr 我不这么认为。根据documentation"session_destroy() 销毁所有与当前会话关联的数据。它不会取消设置任何与会话关联的全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用 session_start()。" 我已经看到这种情况发生在通过再次调用 session_start() 恢复会话数据之前。我认为垃圾收集器必须运行才能完全删除临时文件。
    • 不能根据文档使用$_SESSION = array(); 删除会话变量引用吗?最终什么都不会被删除(内存仍然需要被垃圾收集并且磁盘集群必须被重写),但是文档中的示例看起来非常完整。
    • @sjagr 没错。他们提供的例子非常好。听起来 OP 在问为什么这个例子如此彻底(在清除 cookie 等方面),而不是仅仅调用 session_destroy();。 OP 说他/她没有设置任何 cookie,也不太清楚为什么需要删除它们。我只是解释说,这都是 PHP 如何开箱即用以及 cookie 如何提供对数据的引用的一部分。为了真正打破会话,你必须打破相应的参考。这只是对正在发生的事情的解释。
    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 2023-03-24
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多