【问题标题】:Delete session cookie删除会话 cookie
【发布时间】:2013-09-12 07:00:04
【问题描述】:

为什么当我打电话时:

<?php

setcookie("PHPSESSID", "", time() - 3600);

?>

在会话 cookie 上它不会被删除,但如果我要在另一个 cookie 上调用它,它会被破坏吗?

这很好用:

<?php

setcookie("tom", "tom", time() - 3600);

?>

但上面带有会话 cookie 的示例没有。

我已经在 google chrome 和 firefox 上尝试过,但在查看头文件时仍然得到相同的结果。

这是会话 cookie 的输出:

Array
(
    [_GET] => Array
        (
        )

    [_POST] => Array
        (
        )

    [_COOKIE] => Array
        (
            [PHPSESSID] => v61njiklq3kd5koc6i8i7otab7
        )

    [_FILES] => Array
        (
        )

    [GLOBALS] => Array
 *RECURSION*
)

【问题讨论】:

  • 何时检查转储中的 cookie?在您删除 cookie 的同一请求期间,还是稍后的一个请求期间?那么您的代码是否通过了另一个session_start()
  • 我删除了 'session_start()' 行并将其替换为 setcookie() 行,然后重新加载了几次,但 cookie 仍然存在。这是唯一的页面。

标签: php session cookies


【解决方案1】:

要删除由 session_start() 创建的“PHPSESSID”cookie,请将其设置为空。

setcookie( "PHPSESSID", "", time()-3600, '/');

【讨论】:

    【解决方案2】:
    setcookie( session_name(), "", time()-3600, '/');
    

    有效!删除会话 cookie 的缺失部分是函数 'setcookie()' 的最后一个参数,如 '/'。

    【讨论】:

      【解决方案3】:

      无论如何,您不应该像那样破坏会话,而应该使用本机函数 session_destroy() 来破坏会话。

      通常,PHPSESSID cookie 会在下次调用 session_start() 时重新生成,这可能就是您似乎没有删除 cookie 的原因。

      【讨论】:

        【解决方案4】:

        这是因为,当您调用脚本删除 cookie 时,会话处理程序实际上将会话 cookie 更新为仍然“在线”。您必须销毁会话,而不仅仅是(尝试)删除 cookie。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-12
          • 2016-06-17
          • 1970-01-01
          • 2012-05-23
          • 2010-11-08
          • 2022-01-03
          • 2012-09-01
          相关资源
          最近更新 更多