2009-10-16 46 views
5

我的会话似乎只在当前窗口/选项卡中有效。此外,它似乎很快超时。继承人如何我目前正在试图做到这一点:Zend Framework rememberMe()似乎不记得我

这是我的登录控制器:

$adapter = $this->getAuthAdapter($data); 
$auth = Zend_Auth::getInstance(); 
$result = $auth->authenticate($adapter); 

if (!$result->isValid()) { 
    $this->view->err = "Invalid username or password.<br/>Please try again."; 
    return $this->render('index'); // re-render the login form 
} 

Zend_Session::rememberMe(60*60*24*7*4); 

而且这是在我的引导:

Zend_Session::start(); 

我是比较新的一些这东西,所以忍受我!任何帮助将不胜感激。

回答

3

这是发生了什么事。该网站位于与服务器上的另一个网站共享会话文件夹的服务器上。尽管我使用ini_set增加了会话生存期,但我的会话仍被其他应用程序删除。

为了解决这个问题,我简单地将session.save_path设置为一个新的文件夹。问题解决了!

1

通过源为Zend_Session看,了rememberMe()方法调用rememberUntil()的调用内置的PHP方法session_set_cookie_params()

所以,你不妨检查一下你的php.ini值session.cookie_lifetime。如果它不是0,那么Zend_Session :: rememberMe()将是无用的,除非值小于session.cookie_lifetime。在这种情况下,您可能想要在php.ini中或在使用ini_set()的应用程序中将其设置为0,如session.cookie_lifetime man page的第一条评论中所示。

+0

你好马克,遗憾的延迟响应。我几天没有想到要在这里看看。 cookie_lifetime实际上设置为0.我已经阅读过rememberMe需要在session_start()之前调用,以便session_set_cookie_params可以设置生存期。 但是我也读过zend_session :: start()应该放在bootstrap中,在登录脚本运行并执行rememberMe()之前调用它。有什么想法吗? – Brian 2009-10-27 19:58:15

+0

给它一个镜头,在会话开始后立即粘贴rememberMe呼叫。由于您尚未进行身份验证,因此无法设置超时时间 – Mark 2009-10-30 13:37:36

2

我只想补充一点,你改变了session.save_path的与后续行的.htaccess,使其工作。我看到答案认为我在.ini中更改了它,但它在.htaccess中。

例如:

php_value session.save_path /home/kaos/data/sessions/