我正在使用Zend Framework for PHP并使用Zend_Session模块处理会话。这就是我在初始化程序(或引导程序)中的含义:
Zend_Session::start();
Zend_Session::rememberMe(864000);
864000秒应该是好的10天,但我仍然被踢出大约一个小时(或者可能少一点)。我已经通过设置为10秒来测试这个语句是否有效,并且确实在适当的时候被踢出了,但是当我将它设置为非常高的值时,它不起作用!我在这里查看了一些文档: http://framework.zend.com/manual/en/zend.session.html
我看到的另一种方法是使用以下方法:
$authSession = new Zend_Session_Namespace('Zend_Auth');
$authSession->setExpirationSeconds(3600);
现在,我有不同的命名空间。这是否意味着如果我想让它们过期,我必须为所有这些设置它?我还没有测试过这种设置过期的方法,但我真的很想看看这里的大师们对于解决这个问题的正确方法有什么看法。非常感谢...
另外,有没有人知道如何才能使会话永不过期?我已经尝试将第二个设置为0和-1,但是会引发错误。
答案 0 :(得分:12)
我遇到了同样的问题并通过以下方式解决了这个问题:
resources.session.save_path = APPLICATION_PATH "/../data/session/"
resources.session.gc_maxlifetime = 864000
resources.session.remember_me_seconds = 864000
<{1>}(as suggested by tawfekov)和中的
application.ini
<{1>}中的(我以前通常会忘记这一点)。您必须为会话目录提供正确的访问权限(protected function _initSessions() {
$this->bootstrap('session');
}
)。我描述了问题here。希望这将有助于下一个有同样问题的人。
答案 1 :(得分:3)
需要正确设置客户端的计算机时钟,日期和时区,才能使会话到期。否则,时间转换已关闭,并且可能导致您的Cookie在其到达浏览器的那一刻到期。
答案 2 :(得分:1)
在开始会话之前尝试打电话记住我:
Zend_Session::rememberMe(864000);
Zend_Session::start();
否则我相信它将使用默认值remember_me_seconds
。见49.4.4. rememberMe(integer $seconds)
此外,有谁知道我怎么做 它会使会话永不过期? 我已经尝试将秒设置为0和 -1,但是会抛出错误。
我认为这是不可能的。会话由用户计算机上是否存在cookie控制。即使用户清除了缓存,也可以删除这些cookie。我认为你能做的最好的事情是把它设置得非常大。说12个月。
答案 3 :(得分:1)
我猜您使用的是ZF 1.8或更高版本, 所以你可以放入config.ini文件
resources.session.save_path = APPLICATION_PATH“/../data/session” resources.session.remember_me_seconds = 864000
并自动加载这些设置 再次仅在ZF 1.8或更高版本中,如果不是你必须手动加载这些配置 我希望它可以帮助你:)
答案 4 :(得分:0)
服务器上是否还有其他PHP应用程序在运行?
假设您使用的是基于文件的标准会话处理程序,PHP会将所有会话存储在同一个地方(通常为/ tmp)。
如果您使用默认的session_gc_maxlifetime设置在服务器上有其他脚本,则可能正在吃会话文件。
最简单的解决方法是配置PHP以存储此应用程序的某些特殊会话文件 - 这样,服务器上运行的其他应用程序将永远不会意外地“清理”此应用程序中的会话数据。
尝试创建/ tmp / myAppPhpSessions(或其他)之类的目录,然后添加:
ini_set('session.save_path','/tmp/myAppPhpSessions');
ini_set('session.gc_maxlifetime', 864000);
位于引导程序文件的最顶层。
确保在php.ini
中关闭session.auto_start