2016-08-01 54 views
2

我想爲我的登錄表單提供一個「記得我」的cookie,並讓它工作,直到我重新打開瀏覽器。我正在使用Zend Framework 2來完成它。ZF2 RememberMe在關閉瀏覽器後過期

我成立了一個形式與複選框,並驗證表單後,有這個在我的控制器:

$userSession = new Container("test"); 

$sessionManager = $userSession->getManager(); 
$sessionManager->rememberMe(1209600); 
$sessionManager->start(); 

在module.config.php我對會話進行如下設置:

'session' => array(
    'name' => 'Test_SESSION', 
    'save_path' => realpath('C:\xampp\htdocs\Workspace\test\data\session'), 
    'remember_me_seconds' => 1209600, 
    'cookie_lifetime' => 1209600, 
    'use_cookies' => true, 
    'cookie_httponly' => true, 
), 

最後在module.php:

$session = new SessionConfig(); 
$session->setOptions($this->serviceLocator->get("config")["session"]); 

我搜索通過網絡對任何建議並嘗試了一些東西,但至少當我關閉瀏覽器時,Cookie被刪除。 Firefox的刪除cookies設置也被檢查,所以它們不會被自動刪除。有沒有人有成功的解決方案或提示?

編輯:當我拿起newtake的代碼,並添加$sessionManager->rememberMe();它,關閉瀏覽器後,會話仍然活着,但我不能再登錄,即使登錄過程成功完成。任何人都聽到這種好奇心?

回答

0

需要設置SessionConfigSessionManager。這是我的配置

'service_manager' => array(
    'factories' => array(
     'Zend\Session\SessionManager' => function ($sm) { 
      $sessionConfig = new \Zend\Session\Config\SessionConfig(); 
      $sessionConfig->setOptions([ 
       'use_cookies' => true, 
       'gc_maxlifetime' => 1728000, 
       'cookie_lifetime' => 1728000, 
       'name' => 'COOKIE_NAME', 
      ]); 

      $sessionManager = new \Zend\Session\SessionManager($sessionConfig); 
      $sessionManager->start(); 
      return $sessionManager; 
     } 
    ) 
) 
+0

感謝您的迴應,但我怎麼能在控制器中使用這項服務? –

+0

會話將開始,但在關閉瀏覽器後仍然被刪除:/ –

+0

@HansMartin使用很簡單,只需要從Container創建一個對象。例子'$ session = new Container('container-name');' – newage