0

私はPHPコースの課題に取り組んでいますが、その最後の部分で立ち往生しています。

割り当ては、単純なログインフォームを作成し、セッションとハードコードされたユーザー名とパスワードを使用することです(つまり、データベースはありません)。

私が問題を抱えているのは、ログインを処理するクラス、特にセッションです。コードがたくさんあり、何を削除できるかわからなかったので、代わりにPastebinに配置しました。問題がないことを願っています。

それは、クラスに組み込まれているユニットテストがnrを除いて合格するということです。4、ユーザーがログインしていることを確認しているもの。問題は$ _SESSION [$ this-> loginSession]が設定されていないことであるようです。これは、私が助けを必要としていることです。

変数$loginSessionはクラスの先頭で宣言されており、ユーザーが正しいユーザー名とパスワードを入力したときに「isLoggedIn」に設定する必要がありますが、それは発生しません(エラーメッセージは表示されません)。

私のクラスは:

<?php

class LoginHandler {

        private $loginSession;

        public function IsLoggedIn() {
                if($_SESSION[$this->loginSession] == "isLoggedIn") {
                        return true;
                }
                else {
                        return false;
                }
        }

        public function DoLogin($username, $password){

                if ($username != null && $password != null){
                        switch ($username){
                                case "hello";
                                if ($password == "1234"){
                                        $_SESSION[$this->loginSession] == "isLoggedIn";
                                        return true;
                                }
                                else return false;
                                case "hello2";
                                if ($password == "12345"){
                                        $_SESSION[$this->loginSession] == "isLoggedIn";
                                        return true;
                                }
                                else return false;
                        }
                }
                else {
                        return false;
                }
        }

        public function DoLogout(){
                unset($_SESSION[$this->loginSession]);
        }

        public function Test() {

                $this->DoLogout();

                // Test 1: Check so you're not logged in.
                if($this->IsLoggedIn() == true){
                        echo "Test 1 failed";
                        return false;
                }

                // Test 2: Check so that it's not possible to login with wrong password.
                if ($this->DoLogin("hello", "4321") == true){
                        echo "Test 2 failed";
                        return false;
                }

                // Test 3: Check that it's possible to log in.
                if ($this->DoLogin("hello", "1234") == false){
                        echo "Test 3 failed";
                        return false;
                }

                // Test 4: Check that you're logged in
                if ($this->IsLoggedIn() == false){
                        echo "Test 4 failed";
                        return false;
                }

                return true;
        }
}

?>

他のすべてのファイルではなく、クラスを含めるだけで十分だといいのですが、そうでない場合は、それらを追加します。

4

4 に答える 4

3

セッションを開始する必要があります。session_start(); 使用しているドキュメントの最上部に配置します(ページの読み込み時に1回のみ)。

于 2012-09-05T19:42:36.620 に答える
3

今私はそれを見る:-)

$ _SESSION [$ this-> loginSession] == "isLoggedIn";

==あるべき=

==比較しながら=セット

于 2012-09-05T19:54:10.433 に答える
0

$ this-> loginSessionは設定されないため、NULLになります
$ _SESSION [null]は、私が知る限り不可能です。

コードを次のように変更します

private $loginSession = 'testing';

そしてそれはうまくいくはずです

于 2012-09-05T19:49:34.790 に答える
0

ケースの指示にセミコロンを入れるのはなぜですかcase "hello";コロンがあるはずです。case "hello": { ...instructions}

于 2012-09-05T20:13:31.990 に答える