PHP - 您是不是需要再次设置会话数据以重置生命周期?

Posted

技术标签:

【中文标题】PHP - 您是不是需要再次设置会话数据以重置生命周期?【英文标题】:PHP - Do you need to set the session data again to reset the lifetime?PHP - 您是否需要再次设置会话数据以重置生命周期? 【发布时间】:2012-11-23 03:23:28 【问题描述】:

...还是只需要开始一个新会话?

我的任务是修复导致会话过期的错误,即使 session.gc_maxlifetime 设置为 8 小时(它确实已设置,我已经检查过)。

浏览完代码后,我注意到 session_start() 在每次加载时都会被调用,正如预期的那样,但登录数据会话仅在用户登录时设置。

我是否需要在每次页面加载时设置用户数据会话以重置会话生命周期?

即使页面没有重新加载,我也需要会话保持 8 小时。

【问题讨论】:

【参考方案1】:

您需要重新设置会话变量。

一种方法,使用$_SESSION['last_click_time'] = time();并进行比较。如果它已过时,请刷新会话变量、重新登录用户等等。

【讨论】:

它应该可以像现在这样工作。请参阅此代码:pastebin.com/puQVqgpY 它的作用:1) 启动会话 2) 将会话生存期设置为 8h 3) 不带任何参数调用 authorize() 4) 将会话数据与数据库匹配 5) 数据正确,它设置会话数据再次返回true。 ...由于某种原因,会话仍会在不到 8 小时的时间内到期(不确定持续多长时间,但绝对不会超过 2 小时)。 至于你建议的方法,如果 last_click_time 会话过期,那将不起作用。 对不起,我没有线索了。我通常只保留会话变量,默认超时。我希望你能找到答案! 是的,我很确定 Álvaros 的回答解决了它,但你回答了我问的问题,所以我接受了你的回答。【参考方案2】:

您可能正在使用会话文件的默认位置,它是服务器上所有网站共享的临时目录。在这种情况下,session.gc_maxlifetime 最短的站点可能会从所有站点中删除会话数据。原因是无法确定哪个站点拥有哪个会话文件。

您需要为会话创建一个自定义目录并使用session.save_path 指定它

【讨论】:

哦,这很有趣。我只需要将 save_path 更改为其他内容还是我也需要更改代码? 没关系,我搞定了。现在我只需要等待,看看它是否有效。感谢您的建议! :)

以上是关于PHP - 您是不是需要再次设置会话数据以重置生命周期?的主要内容,如果未能解决你的问题,请参考以下文章

如何为Laravel中的每个会话设置不同的到期时间?

PHP 会话 ID - SID 的有效期是多久? [复制]

如何设置会话的生命周期

php表单mysql更新保存数据

如何在 PHP 中将变量重置为 NULL?

php会话(session)生命周期概念介绍及设置更改和回收