0

ユーザーのログインとログアウト/セッションの有効期限情報をデータベースに追加したいのですが、通常のログインとログアウトは簡単ですが、自動セッションの有効期限を続行する方法がわかりませんでした。

私の認証は以下のように機能します。

マイ ログイン コントローラ アクション

if ($request->isPost()) {
            $data = $request->getParams();
            $userModel = new Application_Model_User_DbTable();
            if ($user = $userModel->login($data['email'], $data['password'])) {
                /* check if user is activated or not */
                if ($user['status'] == 0) {
                    $this->view->loginerror = "<b>Account not active :</b> Please wait for admin to activate your account";
                }elseif($user['status'] == -1){ 
                    $this->view->loginerror = "<b>Account Suspended :</b> Your account is suspeneded you must contact admin to continue";
                }else {
                    /* Store authentication data in session */
                    $auth = Zend_Auth::getInstance();
                    $identity = Zend_Auth::getInstance()->getStorage();
                    $identity->write($user);
                    $this->_redirect('/fax');
                }
            } else {
                $this->view->loginerror = "<b>Invalid login :</b> Email or passsword is invalid !";
            }
        }

ユーザー コントロールのメソッドの認証

function authenticate($email, $password) {
        $where = array();
        $where[] = $this->getAdapter()->quoteinto('email = ?', $email);
        $user = $this->fetchRow($where);
        if (isset($user['email'])) {
            $salt = $user['password_salt'];
            if (sha1($password . $salt) == $user['password']) {
                /** here i will add login session info**/
                return $user;
            }
            return false;
        }
        return false;
    }
4

1 に答える 1

0

残念ながら、これを実行するためのコア PHP または Zend 関数はなく、セッション タイムアウトはバックグラウンドで実行されません。タイムアウトしたセッションが別のリクエストを行わない限り、セッションがタイムアウトしたかどうかを知ることさえできません。

方法の 1 つは、アクションに ajax リクエストを送信してタイムアウトをチェックし、そのアクションでデータベースを更新することです。

于 2013-03-17T04:27:31.277 に答える