Zend Framework 2 Doctrine Authentication注销非活动用户

时间:2014-03-05 14:36:30

标签: zend-framework2

我尝试在X分钟处于非活动状态后注销用户 但是我找不到设置会话到期时间的方法 我使用Doctrine 2作为身份验证服务器/ adpter 我需要帮助。

1 个答案:

答案 0 :(得分:2)

首先,您必须注册用户拥有的所有单个会话。用户可以同时使用不同的浏览器登录。对于每个会话,您需要注册用户开始会话的时间。

在一些伪代码中:

use Zend\Session\SessionManager;

public function login($username, $password)
{
    // do some checks to perform the login
    // now you have a $user available if login is success

    // Session holds the session id and a timestamp
    $manager = new SessionManager;
    $id      = $manager->getId();

    $session = $this->registerSession($user, $id);
}

然后,您必须检查每个请求当前会话是否不仅可用于php(默认登录代码),而且如果会话仍然有效,则根据您的TTL(生存时间)。因此,假设您使用getAuthenticatedUser()登录用户,请写下以下内容:

use Zend\Session\SessionManager;

public function getAuthenticatedUser()
{
    $manager = new Sessionmanager;

    // This is the session id
    $id = $manager->getId();

    // Now get the $session you registered earlier based on $id

    $now = new DateTime;
    if ($session->getTTL() > $now) {
         return false;
    }

    // continue and get $user based on $session
}