2013-05-15 12 views
5

私は、ZF2セッションとタイムアウトで奇妙で欲求不満な動作を見ています。ここでZend Session SessionManagerとcookie_lifetime

は、私がセッションをセットアップするために使用するコードです:私はこのコードを実行すると

$sessionConfig = new \Zend\Session\Config\StandardConfig(); 
    $sessionConfig->setOptions(array(
     'cache_expire' => 525949, 
     'cookie_domain' => 'mydomain.com', 
     'cookie_lifetime' => 31536000, 
     'cookie_path' => '/', 
     'cookie_secure' => TRUE, 
     'gc_maxlifetime' => 31536000, 
     'name' => 'mydomain', 
     'remember_me_seconds' => 31536000, 
     'use_cookies' => TRUE, 
    )); 

    $sessionManager = new \Zend\Session\SessionManager($sessionConfig); 
    $sessionManager->rememberMe(31536000); 
    $sessionManager->setSaveHandler(new \Zend\Session\SaveHandler\MongoDB($mongo, $options); 
    $session = new \Zend\Session\Container('MY_SESSION', $sessionManager); 

、クッキーが作成されますが、有効期限はセッションの終わりですされます。

私はこのようなコードを変更した場合:

$sessionManager = new \Zend\Session\SessionManager(); 
    $sessionManager->rememberMe(31536000); 
    $sessionManager->setConfig($sessionConfig); 
    $session = new \Zend\Session\Container('MY_SESSION', $sessionManager); 

をクッキーが作成されると有効期限は今から一年です。

ただし、Cookieが残っていてもセッションは30分後に失効します。

私が望むのは、クッキーとセッションの両方が1年間持続することです。これをZF2でどうやって達成するのですか?

+3

StandardConfigではなく、\ Zend \ Session \ Config \ SessionConfig'を使用してください。 – Crisp

+0

上記のオプションと同じオプションでSessionConfigを使用すると、PHPSESSID Cookieが書き込まれません。私は何が欠けていますか? – ebeyrent

+0

上記のオプションは 'mydomain'の' name'セッションを示していますか? – Crisp

答えて

3

問題はgc_maxlifetimeオプションの処理と関係しているようです。 \ Zend \ Session \ SaveHandler \ MongoDBでは、この値はini_get( 'session.gc_maxlifetime')を介してPHP設定から取得されます。

ini_set()が呼び出されている\ Zend \ Session \ SessionManagerのどこにも表示されません。

ソリューションは、私が思うには、次のいずれかを実行します。

  1. 編集php.iniのをと
  2. グローバル編集の.htaccessを値を設定し、拡張
  3. はphp_value session.gc_maxlifetimeを追加\ Zend \ Session \ SessionManagerを開き、gc_maxlifetimeオプションが指定されている場合はini_set()を呼び出す新しいメソッドを追加します。
+4

'ini_set'は' SessionConfig'クラスによって呼び出されます。何も編集する必要はなく、opは正しいクラスを使うだけです。 – Crisp