php PHPSESSID存在,但会话被破坏

时间:2014-01-21 04:20:48

标签: php session cookies modx-revolution

我正在尝试登录用户2周如果用户登录并记住我检查然后我在会话中设置了一些变量并且cookie设置了2周。它已正确设置我已打印并获得值session_cookie_lifetime = 1209600session_gc_maxlifetime = 1209600。我还打印会话并在$_SESSION中获得正确的值。

登录我的网站后,当我关闭我的电脑并重新打开我的网站时,它似乎正在工作(它让我成为登录用户)。但是,当我关闭我的电脑,第二天当我打开我的浏览器时,它无法工作,它显示我没有登录我的网站。我已打印$_COOKIE$_session。它表明在cookie中有:

[PHPSESSID] => svikos35bgclmebk2cqraiddt2

但会议是空的。

我有这个形式的modx东西:

MODx会自动开始和结束每次向网站发出请求的会话。您可以简单地将值保存到$ _SESSION数组中,它们将保存在请求之间,以便您可以在后续页面上使用它们(只要您具有相同的用户会话)。除了不自行调用会话功能来启动,结束或以其他方式操纵会话配置 - 这一切都可以通过MODx中的设置完成时,它并不是真正的魔力。

我正在使用modx revo。这是一个有点描述性的问题。让我知道你需要别的东西。 任何可以帮助我的东西(博客链接,任何设置,任何建议)都将受到高度赞赏 提前致谢

3 个答案:

答案 0 :(得分:2)

这只发生在一天之后? 可以tmpwatch从服务器删除会话文件吗?

答案 1 :(得分:1)

session_cookie_lifetimesession_gc_maxlifetime并不保证,会话将保存一周。 GC杀死未使用的会话。检查有关此参数的PHP文档,您会发现,您无法确定您的会话将在服务器上,并且您不确定,在此之后您的会话将被破坏。 GC是异步的。

如果不存在,您需要在登录后重新创建$ _SESSION(和自动登录)。

查看这篇文章(俄语,试试谷歌翻译: PHP GC: unexpected behavior

答案 2 :(得分:0)

SESSION背后的基本思想是,当您创建或调用session_start()方法时,您的服务器会生成会话ID 并将其存储在服务器内存中。此外,服务器在您的客户端计算机上创建一个cookie,该cookie包含与您的服务器端会话ID相关的 id 。当你调用session_destroy()方法服务器时,删除服务器端的那个id但客户端cookie没有。这就是您的会话ID仍然显示的原因。您还可以通过缓存和cookie清除进行检查。当您清除cookie时,您的会话将被销毁。