$ _SESSION永远不会被设定

时间:2012-09-05 19:41:04

标签: php unit-testing session login

我正在开设一门关于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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

现在我明白了: - )

$ _ SESSION [$ this-&gt; loginSession] ==“isLoggedIn”;

==应该是=

==比较while = sets

答案 2 :(得分:0)

$ this-&gt; loginSession永远不会设置,因此它为NULL 就我所知,$ _SESSION [null]是不可能的

将您的代码更改为

private $loginSession = 'testing';

它应该有效

答案 3 :(得分:0)

为什么在你的案例指令中添加分号case "hello";应该有一个冒号。 case "hello": { ...instructions}