我正在开设一门关于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;
}
}
?>
我希望它足够包含课程而不是所有其他文件,否则我会把它们放好。
答案 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}