2009-10-16 50 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/