如何在Zend Framework 2中设置会话超时

时间:2014-08-18 15:59:16

标签: php zend-framework session-timeout

我没有多少Zend经验,并希望在Zend中更改某人的登录代码,以使会话不会过期。

似乎代码是基本行为:

    $adapter = $this->getAuthService()->getAdapter();
    $adapter->setIdentity($email)->setCredential($password);

    $result = $this->getAuthService()->authenticate();

如何使会话过期或至少将会话设置为特定时间,我该怎么做?

现在用户并没有长时间保持登录状态,我想也许这只是依赖于默认的php设置行为,比如gc_maxlifetime的标准24分钟。

Zend_Session和AuthService之间有什么联系?

3 个答案:

答案 0 :(得分:1)

我认为您需要的是延长会话cookie的生命周期。为此,您可以使用rememberMe()功能。在验证用户身份后执行此操作:

Zend_Session::rememberMe(1209600); //1209600/3600 = 336 hours => 336/24 = 14 days

但延长会话cookie生命周期不会产生影响,因为服务器在gc_maxlifetime时间过后不会识别该cookie。

要解决此问题,您必须确保PHP session.gc_maxlifetime设置至少与传递给rememberMe()的值相同。

我不知道这是不是很好,但你可以增加PHP Session Garbage Collection Time

Bootstrap.php文件中,您可以执行以下操作:

protected function __initSession() {
ini_set('session.gc_maxlifetime', 1209600);  // maxlifetime = 14 days
ini_set('session.gc_divisor', 1);
Zend_Session::start();
}

或在.htaccess档案中:( 14天)

php_value session.gc_maxlifetime 1209600

希望这有帮助。

答案 1 :(得分:0)

以下是如何设置会话超时:

$session = new Zend_Session_Namespace( 'Zend_Auth' );
$session->setExpirationSeconds( 60 ); // 60 seconds

答案 2 :(得分:0)

以下是如何设置会话超时:

$session = new Zend_Session_Namespace( 'Zend_Auth' );
$session->setExpirationSeconds( 60 ); // 60 seconds

这对我很有用。