Насколько мне известно, эта функциональность не встроена в Zend_Auth
, но вы можете достичь того, чего хотите, расширив Zend_Auth_Adapter
, который вы используете в настоящее время, и перевесив authenticate()
метод, как предполагает Даниэльсмит.
Вам необходимо добавить таблицу в вашу БД, которая устанавливается / не устанавливается в процессе входа в систему.Проблема будет неустановленной, если пользователь специально не выйдет из системы, но вы можете сохранить временную метку в БД и разрешить истечь время входа для следующей попытки входа в систему.
My_Auth_Adapter_DbTable extends Zend_Auth_Adapter_DbTable
{
public function authenticate()
{
$authResult = parent::authenticate();
if($this->alreadyLoggedIn(){
$authResult = new Zend_Auth_Result(
Zend_Auth_Result::FAILURE_UNCATEGORIZED,
$this->_identity,
array('User already logged in')
);
} else {
$this->setLoggedIn();
}
return $authResult;
}
private function alreadyLoggedIn()
{
//check db table to see if $this->_identity is already logged in
//then return true or false as appropriate
}
private function setLoggedIn()
{
//update table in DB to reflect logged in status
}
}
У меня нетЯ проверил этот код, но, надеюсь, он поможет вам в правильном направлении.Кроме того, я думаю, что если вы сделаете это таким образом, то вам не нужно будет каким-либо образом изменять обработчик сессии.