【问题标题】:php session timeoutphp会话超时
【发布时间】:2011-10-17 15:07:37
【问题描述】:

我有一些关于 php 会话超时的问题。我在应用程序运行时设置了以下值:

session.gc_maxlifetime = 3600
session.cookie_lifetime = 3600
session.save_path = myApplicationPath/tmp
session.use_cookies = 1
session.use_only_cookies = 1

但是,我的会话将在大约 30 分钟后到期。另外,我的 tmp 目录仍然是空的,所以看起来实际上没有设置任何 cookie。 echoing ini_get("session.save_path") 确实返回了正确的路径。

【问题讨论】:

  • 只是为了检查:确保在调用 session_start 之前设置了 ini 值。此外,与phpinfo() 的输出进行比较,您可以将其放入测试文件中。
  • 值确实是在 session_start 之前设置的。 phpinfo 状态:本地值 var/www/myproject/tmp 主值 /etc/lib/php5.会话文件仍被写入主值。
  • 找到了!使用 Zend_Session 您不会收到有关在其他地方开始的会话的通知。当我停止使用 Zend_Session 时,我收到了通知。将我的代码放在引导程序中解决了这个问题。

标签: php session timeout


【解决方案1】:

注意:

如果不同的脚本具有不同的 session.gc_maxlifetime 值,但共享相同的存储会话数据的位置,则具有最小值的脚本将清理数据。在这种情况下,将此指令与 session.save_path 一起使用。

PHP Manual

【讨论】:

  • OP 描述了相反的行为:会话直到 30 分钟才过期,尽管 session.gc_maxlifetime 声明为 6 分钟。
  • AFAIU session.gc_maxlifetime 是 1 小时,会话在他们应该做之前就结束了
  • 哦,哇,对不起,这是我的错。不知道我怎么会把 3600 秒误解为 6 ​​而不是 60 分钟。 ;)
【解决方案2】:

我会说 PHP 找不到您的 save_path 或者没有写入权限,因此它将会话文件(not cookie)存储在默认共享目录中(因此网站最短的gc_maxlifetime 将删除所有其他站点的会话)。

【讨论】:

  • 这也是我自己的猜测。但是, save_path 的输出给了我正确的路径,并且该目录有 777 个权限。
  • 会话文件确实被写入了默认目录。我在这里错过了什么?
  • session.save_path = myApplicationPath/tmp: 你的真实路径真的不是以斜线开头吗?
猜你喜欢
  • 2011-03-05
  • 2010-12-11
  • 2019-06-28
  • 2011-03-29
  • 2021-06-30
  • 2010-11-20
相关资源
最近更新 更多