2013-05-15 22 views
5

ZF2 oturumları ve zaman aşımları ile bazı garip ve sinir bozucu davranışlar görüyorum.Zend Session SessionManager ve cookie_lifetime

Burada oturumu kurmak için kullandıkları kod: Bu kodu çalıştırdığınızda

$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); 

, çerez oluşturulan alır ama son kullanma oturumu sonudur.

bu gibi bir kod değiştirirseniz:

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

çerez oluşturulan alır ve son kullanma bugünden itibaren bir yıl. Bununla birlikte, 30 dakika veya daha uzun bir süre sonra, yine de çerez kalsa bile oturumun süresi sona erer.

Ne istediğim, hem çerez hem de oturumun bir yıl boyunca devam etmesidir. Bunu ZF2'de nasıl yapabilirim?

+3

ben Yukarıdaki aynı seçeneklerle SessionConfig kullandığınızda Kullanım '\ Zend \ Session \ Config \ SessionConfig',' StandardConfig' – Crisp

+0

, PHPSESSID çerez yazılı değil değil. Neyi kaçırıyorum? – ebeyrent

+0

Yukarıdaki seçenekler, "etkialan" ın bir oturumunu gösteriyor? – Crisp

cevap

3

Sorun, gc_maxlifetime seçeneğinin işlenmesiyle ilgili gibi görünüyor. \ Zend \ Session \ SaveHandler \ MongoDB'de, bu değer ini_get ('session.gc_maxlifetime') aracılığıyla PHP yapılandırmasından alınır;

\ Zend \ Session \ SessionManager'da ini_set() çağrısının herhangi bir yerde göremiyorum.

çözümü, bence, aşağıdakilerden birini yapmaktır:

  • uzatın php_value session.gc_maxlifetime

    1. Düzenleme php.ini ve set değeri küresel
    2. Düzenleme .htaccess ve ekleyin \ Zend \ Session \ SessionManager ve gc_maxlifetime seçeneği sağlandığında ini_set() öğesini çağıran yeni bir yöntem ekleyin.
  • +4

    'ini_set'' SessionConfig 'sınıfı tarafından çağrılır, hiçbir şeyi düzenlemeye gerek yoktur, sadece doğru sınıfı kullanmanız gerekir. – Crisp