清除cookies后PHP会话变量丢失

3
我一直在互联网上研究会话和Cookie,而我经常遇到的关于会话的论点是,如果禁用了Cookie,这不会影响会话。
但是,每次清除Cookie时,我的会话变量似乎也被清除了。此外,我在一些网站上读到,实际上应该随着Cookie清除会话。
请问有人能为我解释一下吗?
5个回答

5
如果可能的话,PHP会将其会话ID存储在cookie中。如果您的浏览器拒绝cookie,则会话ID将随查询字符串一起传递。
如果您删除了cookie并且没有进行查询字符串的调整,则PHP会忘记您的身份!
但是,可以通过禁用cookie使用来解决这个问题,详见http://de2.php.net/manual/en/session.configuration.php#ini.session.use-cookies

我尝试了你的解决方案,但仍然遇到了同样的问题。但是当我查看了你提供的链接时,发现自 PHP 5.3.0 起,session.use_only_cookies 默认设置为 1,这就解释了问题所在。非常感谢! - aelsheikh

0

您误解了。会话依赖于cookie。当您请求页面时,包含您的会话UID的cookie将被发送到服务器。因此,清除cookie将导致会话丢失。


0

如果需要的话,您可以强制使用 PHP SESS ID 在 get 中而不是在 cookies 中,但默认情况下是使用 cookies。


0

会话利用cookie存储近期(有时甚至是负数)到期日期的cookie。在PHP中,这个cookie默认的名称为PHPSESSID。在运行时使用PHP中的session_start函数来加载和关联/识别用户和相关会话信息是必需的。

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

这是一篇很好的文章,可以解释PHP会话背后的任何神秘之处:

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


0

PHP默认将会话ID存储在cookie中,如果您清除了cookie,那么会话就会消失。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接