0

Zend Framework を学んでいて、Zend_Session_Namespace に問題があります。

シナリオは次のとおりです。

  1. ホームページ (ユーザーがログイン インデックス コントローラーをクリック)
  2. ログインページ(ユーザー認証完了→ログインコントローラー)
  3. ログインに成功した場合: 新しい zend_Session_Namespace("login") を作成し、ホームページ ボタンのある別のページに移動します。
  4. ユーザーがホームページ ボタンをクリックします。セッションからユーザー名にアクセスし、ウェルカム メッセージを表示できます。
  5. ユーザーが再度ログイン ページをクリックします。isset($session->name) をチェックして、再度ログインできないようにし、代わりに別のページに移動します。--> 私はここで失敗しています。セッションが何らかの形でリセットされました。何が欠けているのかよくわかりません。

    class IndexController extends Zend_Controller_Action
    {
        public function init()
        {
        }
    
        public function indexAction()
        {
             $session = new Zend_Session_Namespace("login_session");
              //Check if the session is already valid
             if(isset($session->name)) {
                $this->view->userLoggedIn="true";
                $this->view->name=$session->name;
             }
        }
    }
    
    
    class LoginController extends Zend_Controller_Action
    {
        public function loginaction(){
            $session = new Zend_Session_Namespace("login_session");
    
            if(isset($session->name)){
               //Redirect to New Page-Already Logged In
            } else {
               //Authenticate the user and if login is successful
               $session->name="USER_NAME";
            }
        }
    }
    

ありがとうございました。

4

1 に答える 1

1

このコードは、前述のタイプミスを除けば問題ありません。

コードの別の場所で、誤ってセッションの名前空間を上書きしてしまう可能性があります。私たちは皆、少なくとも一度はそれをしたと思います。

独自の認証ソリューションを展開しようとする代わりに、ZF が提供するものを使用することをお勧めします。Zend_Auth

基本的な Zend_Auth ログイン/ログアウトは次のようになります。

//non production code for example only
public function loginAction()
    {
        $form = new Application_Form_Login();

        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {
                $data = $form->getValues();
                $authAdapter = new My_Auth_Adapter($data['username'], $data['password']);
                //authenticate
                $result = $authAdapter->authenticate();
                if ($result->isValid()) {
                    //store the user object
                    $auth = Zend_Auth::getInstance();
                    //access Zend_Auth session namespace
                    $storage = $auth->getStorage();
                    $storage->write($authAdapter->getUser());
                    //add message to flashmessenger
                    $this->message->addMessage('Welcome');
                    //redirect to the homepage
                    return $this->_redirect('/');
                } else {
                    //handle authentication errors
                    $this->view->loginMessage =
                        "Sorry, your username or password was incorrect";
                }
            } else {
                //handle form validation errors
                $this->_redirect('/users/index/register');
            }
        } else {
            //if not post render empty form
            $this->view->form = $form;
        }
    }

    public function logoutAction()
    {
        $authAdapter = Zend_Auth::getInstance();
        $authAdapter->clearIdentity();
    }

http://www.ens.ro/2012/03/20/zend-authentication-and-authorization-tutorial-with-zend_auth-and-zend_acl/

幸運を!

于 2013-05-13T11:03:43.770 に答える