2011-08-01 241 views
4

我有一些关于php会话超时的问题。我在应用程序运行时设置了以下值: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。回声ini_get(“session.save_path”)确实返回正确的路径。

+1

只是为了检查:确保你在你打电话'session_start'之前设置的ini值。此外,还可以将'phpinfo()'的输出与放置到测试文件中的输出进行比较。 – hakre

+0

的值确实是在session_start之前设置的。 phpinfo指出:本地值var/www/myproject/tmp主值/ etc/lib/php5。会话文件仍然写入主值。 – eelco

+0

找到了!使用Zend_Session,您不会收到有关在其他地方启动的会话的通知。当我停止使用Zend_Session时,我收到了通知。把我的代码放在bootstrap中解决了这个问题。 – eelco

回答

1

我想说的是PHP无法找到您save_path或没有权限上写的,所以它存储在默认的共享目录会话文件(饼干)(所以用最短gc_maxlifetime网站将删除会议来自所有其他网站)。

+0

这也是我自己的猜测。 save_path的输出为我提供了正确的路径,并且该目录有777个权限。 – eelco

+0

会话文件确实写入默认目录。我在这里错过了什么? – eelco

+0

'session.save_path = myApplicationPath/tmp':你的真实路径实际上不是以斜杠开始的吗? –

2

注:

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

​​

+0

该OP有相反的描述相反的行为:会话不会过期到30分钟,尽管* session.gc \ _maxlifetime *状态6分钟。 – Gumbo

+0

AFAIU'session.gc_maxlifetime'是1小时,会话在他们应该做之前就死了 – RiaD

+0

哦,哇,对不起,这是我的错。不知道我怎么会把3600秒误解为6分钟而不是60分钟。 ;) – Gumbo