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[$this->loginSession] == "isLoggedIn";

== 应该是 =

== 比较 while = 集合

于 2012-09-05T19:54:10.433 回答
3

您需要开始会话。session_start(); 将它放在您正在使用的文档的最顶部(在页面加载时仅一次)。

于 2012-09-05T19:42:36.620 回答
0

为什么要在案例说明中使用分号case "hello";?应该有一个冒号。case "hello": { ...instructions}

于 2012-09-05T20:13:31.990 回答
0

$this->loginSession 从未设置,所以它是 NULL
$_SESSION[null] 据我所知是不可能的

将您的代码更改为

private $loginSession = 'testing';

它应该可以工作

于 2012-09-05T19:49:34.790 回答