私は Web サイトを持っており、ユーザーが別のデバイスから既にログインしているかどうかを確認したいと考えています。セッション値を user テーブルに保存しますが、それを防ぐにはいくつかの条件が必要です。
ログインプロセス用に次のコードがあります。
public static function login($request)
{
if (empty($request)) {
return false;
}
Zend_Session::regenerateId();
$authAdapter = new Zend_Auth_Adapter_DbTable();
$authAdapter->setTableName('ah_users');
$authAdapter->setCredential($request['password']);
$authAdapter->setCredentialTreatment('MD5(?)');
$authAdapter->setCredentialColumn('password');
$authAdapter->setIdentity($request['username']);
$authAdapter->setIdentityColumn('nname');
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$authData = $authAdapter->getResultRowObject();
$user = new Model_AhUsers((array) $authData);
if(!$user->isActive()) return 3; //if user is activated
if($authData->role == 'admin' && $authData->payment != 'completed') return 4;
//here i want to query if user is logged in from another browser / pc device to return 1
$user->seskey = Zend_Session::getId();
$user->update();
self::setLoggedUser($user);
return 0;
}
return 2;
}
また、私はこれらの機能を持っていますが、それらをどのように組み合わせても、正常に機能しません。
public static function isLogged()
{
$auth = Zend_Auth::getInstance();
return $auth->hasIdentity();
}
public static function setLoggedUser(Model_AhUsers $user)
{
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$storage->write($user);
}
/**
* @return Model_AhUsers|null
*/
public static function getLoggedUser()
{
$auth = Zend_Auth::getInstance();
return $auth->getIdentity();
}
public function logout()
{
$auth = Zend_Auth::getInstance();
$auth->clearIdentity();
}