【问题标题】:PHP session variables gone when clearing cookies清除 cookie 时 PHP 会话变量消失
【发布时间】:2012-04-06 21:29:54
【问题描述】:

我一直在互联网上对会话和 cookie 进行大量研究,我不断遇到的关于会话的论点是,如果禁用 cookie,它不会影响会话。

不过,每次清除 cookie 时,我的会话变量似乎也会清除。另外,我在一些网站上读到会话实际上应该使用 cookie 清除。

谁能给我解释一下?

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    如果可能的 php 将其会话 ID 存储在 cookie 中。如果您的浏览器拒绝,它会携带会话 ID 以及查询字符串。

    如果你杀死你的cookies并且没有对查询字符串进行调整,php会忘记你是谁!

    但是,http://de2.php.net/manual/en/session.configuration.php#ini.session.use-cookies 可以禁用 cookie 的使用

    【讨论】:

    • 我尝试了您的解决方案,但仍然遇到同样的问题,但是当我查看您的链接时,我看到 session.use_only_cookies 自 PHP 5.3.0 以来默认设置为 1,这解释了一些事情。非常感谢!
    【解决方案2】:

    你错了。会话依赖于 cookie。当您请求一个页面时,包含您的会话 UID 的 cookie 会发送到服务器。所以清除 cookie 会导致会话丢失。

    【讨论】:

      【解决方案3】:

      如果需要,您可以在 get 中强制使用 PHP SESS ID 而不是在 cookie 中,默认的是 cookie

      【讨论】:

        【解决方案4】:

        会话通过存储具有近期(有时甚至是负数)到期日期的 cookie 来利用 cookie。在 PHP 中,默认情况下可以在名称 PHPSESSID 下找到此 cookie。在运行时需要在 PHP 中使用 session_start 函数来加载和关联/识别用户和关联的会话信息。

        由于会话是一种特殊类型的 cookie,清除 cookie(即使禁用 cookie)可能会导致会话标识符丢失,从而导致会话重置。

        这是一篇很好的文章,它揭开了 PHP 会话背后的所有谜团:

        http://justinmccormick.com/wp/programming/php-sessions-explained

        【讨论】:

          【解决方案5】:

          默认情况下,如果您清除会话已消失,PHP 会将会话 ID 存储在 cookie 中。

          您可以做的是启用session.use_trans_sid。这样,PHP 会将会话 ID 附加到 url。 (但我不建议这样做)

          【讨论】:

            猜你喜欢
            • 2014-12-26
            • 1970-01-01
            • 1970-01-01
            • 2012-10-29
            • 1970-01-01
            • 2015-02-23
            • 2012-09-02
            相关资源
            最近更新 更多