Session Zend framework会话过早过期

Session Zend framework会话过早过期,session,zend-framework,Session,Zend Framework,我正在使用Zend Framework for PHP,并使用Zend_会话模块处理会话。这是我的初始值设定项(或引导程序)中的内容: 864000秒应该可以维持10天,但我仍然在大约一个小时(或者更少一点)的时间里被踢出局。我已经测试过,如果将这个语句设置为10秒,它是否有效,我确实会在适当的时间被踢出,但是当我将它设置为非常高的值时,它就不起作用了!我在这里浏览了一些文档: 我看到的另一种方法是使用以下方法: $authSession = new Zend_Session_Namespac

我正在使用Zend Framework for PHP,并使用Zend_会话模块处理会话。这是我的初始值设定项(或引导程序)中的内容:

864000秒应该可以维持10天,但我仍然在大约一个小时(或者更少一点)的时间里被踢出局。我已经测试过,如果将这个语句设置为10秒,它是否有效,我确实会在适当的时间被踢出,但是当我将它设置为非常高的值时,它就不起作用了!我在这里浏览了一些文档:

我看到的另一种方法是使用以下方法:

$authSession = new Zend_Session_Namespace('Zend_Auth'); 
$authSession->setExpirationSeconds(3600); 
现在,我有了不同的名称空间。这是否意味着如果我想让它们不过期,我必须为所有这些设置这个值?我还没有测试过这种设置过期时间的方法,但我真的很想看看这里的专家们对解决这个问题的正确方法有什么看法。谢谢大家


还有,有人知道我怎样才能使会话永不过期吗?我尝试将秒设置为0和-1,但这会引发错误

服务器上是否运行其他PHP应用程序

假设您使用的是标准的、基于文件的会话处理程序,PHP会将所有会话存储在同一个位置(通常是/tmp)

如果服务器上有其他脚本使用默认会话\u gc\u maxlifetime设置,则它可能正在吞噬您的会话文件

最简单的修复方法是将PHP配置为将此应用程序的会话文件存储在某个特殊的位置,这样服务器上运行的其他应用程序就不会意外地“清理”此应用程序中的会话数据

尝试创建一个类似/tmp/myAppPhpSessions(或其他)的目录,并添加:

ini_set('session.save_path','/tmp/myAppPhpSessions');
ini_set('session.gc_maxlifetime', 864000);
在引导文件的最顶端


确保php.ini中的session.auto_start处于关闭状态

尝试在启动会话之前调用Remembere me:

Zend_Session::rememberMe(864000);
Zend_Session::start();
否则,我相信它将使用默认值
记住我的秒数
。看

还有,有人知道我怎么做吗 它可以使会话永不过期吗? 我已尝试将秒设置为0,然后 -1,但这会抛出一个错误


我认为那是不可能的。会话由用户计算机上是否存在cookie控制。这些cookie可以被删除,即使用户清除了缓存也可以被删除。我想你能做的就是把它设为一个很大的数字。比如说12个月。

我猜您使用的是ZF 1.8或更高版本, 因此,您可以在config.ini文件中

resources.session.save_path=应用程序_路径“/../data/session” resources.session.memory_me_seconds=864000

这些设置将自动加载 同样,只有在ZF 1.8或更高版本中,如果没有,您必须手动加载这些配置
我希望它能帮助您:)

您的客户端的计算机时钟、日期和时区需要正确设置,才能使会话过期正常工作。否则,时间转换将关闭,并可能导致您的cookie在其浏览器中出现时过期。

我遇到了同样的问题,并通过以下方法解决了此问题:

resources.session.save_path = APPLICATION_PATH "/../data/session/"
resources.session.gc_maxlifetime = 864000
resources.session.remember_me_seconds = 864000
应用程序.ini
()和


Bootstrap.php
中(一开始我通常会忘记这一点)。您必须为会话目录提供正确的访问权限(
chmod 777
)。我描述了这个问题。希望这能帮助下一个有同样问题的人。

嗨,蒂姆,谢谢你的建议。-服务器上没有运行其他正在使用会话的应用程序-session.save\u handler=文件在my php.ini中设置,因此应用程序正在使用文件存储会话-session.auto\u start=0在my php.ini中设置-session.cookie\u life=0在php.ini中设置。这意味着cookie将一直保留到浏览器关闭-session.gc_maxlife=1440在my php.ini中设置。我本来希望Zend_会话函数中的一个会在运行时覆盖它,但目前这意味着会话只能持续24分钟?我不熟悉Zend_会话中的内部结构,我建议将php.ini中的值更改为您所需的值,看看这是否能修复它。因为服务器上没有运行其他应用程序,所以这应该不是问题。还要确保您的php.ini确实被读取(检查phpinfo()的输出)。事实上,我已经试过了,但不幸的是,它仍然不起作用:(关于到期日,我在这里找到了我的答案:我希望你也觉得它有用。这是一个技巧,但在web开发方面什么不是技巧hehehey Shimon,我已经检查了这些设置,但是感谢你花时间。非常感谢Jasper。我仍然面临同样的问题,所以我会尽快尝试你的方法。
resources.session.save_path = APPLICATION_PATH "/../data/session/"
resources.session.gc_maxlifetime = 864000
resources.session.remember_me_seconds = 864000
protected function _initSessions() {
    $this->bootstrap('session');
}