2014-03-05 210 views

回答

1

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

在一些伪代码:

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 
}