2012-09-05 7 views
0

저는 PHP 과정에서 과제를 진행하고 있으며 마지막 부분에 갇혀 있습니다.

할당은 간단한 로그인 양식을 만들고 하드 코딩 된 사용자 이름과 비밀번호 (즉 no db)와 세션을 사용하는 것입니다.

내가 문제가되는 것은 로그인 및 세션을 처리하는 클래스입니다. 많은 코드가있어서 내가 제거 할 수있는 것을 모르기 때문에 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

어디에서 전화 하시겠습니까? 여기에 선언 만 있습니다 ... 더 많은 문맥을 제공하십시오. – antonpug

답변

3

이제 알겠습니다 :-)

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

==은 =

==는 동안을 비교 = 수

+0

아, 좋아! 어떻게 내가 그것을 볼 수 없었다;) 많이 고마워! – holyredbeard

3

세션을 시작해야합니다. session_start(); 사용중인 문서의 맨 위에 놓습니다 (한 번만 페이지로드에 놓습니다). 이 NULL 그래서

+0

사실 나는 그것을 (' holyredbeard

+0

당신은 그것을 필요로합니다. 나는 private $ loginSession에 대한 정의를 보지 못했다. 그 문자열을 login_seesion과 같이 설정하십시오. private $ loginSession = 'login_session'; 기본적으로 $ _SESSION [] = 'isLoggedIn'을 설정하는 것과 같습니다. print_r ($ _ SESSION)을 수행하십시오. 당신이 거기에있는 것을 살펴보십시오. – wesside

+0

@wes에 동의하지만 기존 세션을 먼저 확인하는 것을 잊지 마십시오. if (session_id() == "") {session_start();} – antonpug

0

$ this-> loginSession가 설정되지 않습니다
$ _SESSION은 [null가] 내가

변화를 알고 지금까지 수 없습니다에 코드

private $loginSession = 'testing'; 

그것은

를 작동합니다
+0

DoLogin에 설정되어 있습니다. – antonpug

0

설정해야하는 이유 콜론이 있어야합니다 귀하의 경우 명령 case "hello";에 세미콜론을 넣어 않습니다. case "hello": { ...instructions}

관련 문제