I’m working on an assignment on a PHP course, and I’m stucked at the last part of it.
The assignment is to create a simple login form and use a session as well as hardcoded usernames and passwords (i.e. no db).
What I have problems with is the class that handles the login, and sessions especially. There’s a lot of code and I didn’t know what I could remove and therefore I’ve put it on Pastebin instead, hope that’s alright.
Thing is that the unit tests that’s built into the class passes except for nr. 4, the one that’s checking that the user is logged in. The problem seems to be that $_SESSION[$this->loginSession] doesn’t get set, and this is what I need help with.
The variable $loginSession is declared in the beginning of the class, and should be set to “isLoggedIn” when a user types a correct username and password, but that doesn’t happen (no error message).
My class is:
<?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;
}
}
?>
I hope it’s enough to include the class and not all the other files, otherwise I’ll put them up.
Now I see it 🙂
$_SESSION[$this->loginSession] == “isLoggedIn”;
== should be =
== compares while = sets