0

Zend フレームワークを使用しています。簡単なログイン画面を作成しました。ユーザーがログインすると、セッションを設定し、メンバーエリアコントローラーの init 関数で、セッションをチェックしてアクセスを許可するか、ログイン画面にリダイレクトします。

ログインコントローラーを次のように設定しました。これにより、ユーザー名とパスワードがチェックされ、セッションが設定されます。

if (isset($_POST['loginSubmit']) && $form->isValid($_POST)){
            $inputtedUsername = $_POST['username'];
            $inputtedPassword = $_POST['password'];
            if ($inputtedUsername == $username && $inputtedPassword == $password) {
                $loggedIn = new Zend_Session_Namespace('loggedIn');
                $loggedIn->success;
                $this->_forward('index', 'home');
            } else {
                echo 'invalid';
            }
        }

ログインしているユーザーだけが見ることができるはずのホームコントローラーがあるので、 init 関数に次のように記述します。

if (isset($loggedIn->success)) {
            echo 'success';
        }else{
            $url = $this->view->url(array(
                'controller' => 'index',
                'action' => 'index'));
            header('Location:' . $url);
        }
    }

正しい資格情報を使用してログインすると、else 関数に記載されているようにログイン画面にリダイレクトされます。

私は何を間違っていますか?

4

1 に答える 1

2

まず、Zend_Session_Namespace の使用が不完全です (名前空間に値を割り当てていません):

$loggedIn = new Zend_Session_Namespace('loggedIn');//here you created a namespace
$loggedIn->success;//here you created a key in that namespace with no value

コードが構造化されているように見える方法は、割り当てられた値$loggedIn->successがtrueを返すので、試してみてください:

$loggedIn = new Zend_Session_Namespace('loggedIn');//here you created a namespace
$loggedIn->success = true;

これで現在の問題が解決するかもしれませんが、認証と承認に本当に役立つ 2 つの Zend コンポーネントを確認することをお勧めします。

1 つ目はZend_Authです。これは、アプリケーション認証を処理し、ユーザー セッションの永続化の処理にも役立つコンポーネントです。Rob Allen は、開始するのに役立つチュートリアルを提供しています。

2 つ目はZend_Aclで、アクセス制御リスト コンポーネントであり、誰が何にアクセスできるかの承認を扱います。Zend_Acl を開始する場所

于 2012-09-11T02:45:44.430 に答える