【问题标题】:Why PHP session is deleted on page reload?为什么 PHP 会话在页面重新加载时被删除?
【发布时间】:2011-02-03 17:35:51
【问题描述】:

所以我有这个问题,当我在页面上一段时间没有做任何事情时,在我重新加载页面后 $_SESSION 被清除。我检查了代码,它没有任何unset() 函数或任何其他可以清除$_SESSION 变量的东西。 任何想法为什么会发生?

编辑:如果我想让会话一直持续到浏览器关闭,我应该怎么做?我不明白,因为gc 检查会话是否在session_start 上过期,但是我不能在调用session_start 之前修改会话数据,所以在调用session_start 之后修改会话数据会导致过期还是要开会?

session.cookie_lifetime 默认设置为 0,session.gc_maxlifetimesession.gc_divisorsession.gc_probability 也设置为默认值。

【问题讨论】:

  • session.gc_maxlifetime 是什么价值,你了解 my post on how PHP’s session expiration model works吗?
  • @Gumbo,session.gc_maxlifetime 设置为默认值 1440。我想我做到了,是的。我也将 session.gc_probabilitysession.gc_divisor 设置为默认值。
  • @Richards:这个模糊的空闲时间不是这 1440 秒吗?请记住,PHP 的默认垃圾收集器会根据会话文件的修改时间来计算年龄。
  • @Gumbo,但我的问题是:如何重置会话的垃圾收集器计时器,使其不会擦除会话?我不明白它的原因,当调用 session_start() 时,垃圾收集器会完成它的工作,但是在调用 session_start()之前我无法修改会话数据>.
  • @Richards:你不能重置它,因为没有计时器。会话数据的年龄(即上次修改的时间)与 session.gc_maxlifetime 值一起构成会话是否过期。垃圾收集器只是删除此类会话的例程。当这种情况发生时,会话 已经过期。

标签: php session-variables


【解决方案1】:

你有没有把 de session_start() 放在每一页的开头?

【讨论】:

  • 是的,在每一页上。没有使用 session_destory()。
  • session_start() 问题很常见。我正在查找有关会话超时的文档。
  • 它显示:string(4) "1440" 在打印出生命周期的东西后。好吃吗?
  • 这意味着 1440/60 = 24 分钟操作系统会话
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 2018-06-16
  • 2014-06-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多