2011-09-08 10 views
0

여기 여기 내 index.php를PHP 세션이 예상대로 작동하지 않습니다. 어떻게 해결합니까?

<?php 
session_start(); 
if($_SESSION['authorizedreferral'] == false){  //login.php sets 'authorizedreferral' to false, and redirects to here. That way, login.php can't be accessed directly. 
    session_destroy();        //destroy the session, so the 'authorizedreferral' session is revaluated each time. 
    echo "<h1>No ticky, no washy!</h1>";   //Sorry, don't pass go, and don't collect $200 

}elseif(!isset($_COOKIE['loggedin'])){    //if there isn't a 'loggedin' cookie set, forward to the login.php page 
    $_SESSION['authorizedreferral'] = true;   //yes, this is a correct referral. Otherwise, login.php will kick you out! 
    header("Location: login.php");     //forward to login.php 
    exit;           //need this for some reason? 
} 

?> 

입니다 login.php입니다 : 여기

<?php 
    session_start();           //start the session 
    if(!isset($_SESSION['authorizedreferral'])){    //if 'authorizedreferral' isn't set (i.e. someone just loads login.php directly) 

     $_SESSION['authorizedreferral'] = false;    //set 'authorizedreferral' to false - they aren't allowed here! 
     header('Location: http://'.$_SERVER["HTTP_HOST"]);  //and ship 'em back home! 
     exit;             //need this for some reason 

    } 


?> 

이 가능한 상황입니다

  1. 사용자가 index.php를 간다 - 그들이 피난처 이후 로그인하지 않았습니다 (로그인 쿠키가 없습니다). 로그인을 위해 login.php 페이지로 전송됩니다.
  2. 사용자가 login.php에 직접 액세스하려고합니다. 사용자가 index.php로 다시 전송되고 "No Ticky, no washy!"라는 메시지가 나타납니다.

그러나 지금은 사용자가 항상 "No Ticky, No Washy!" index.php 페이지에 접근 할 때. 내가 뭘 놓치고 있니?

http://webify.nitrouscloud.net

답변

4

사용자가 사이트에 오는 첫 번째 시간, 그들은 빈 세션을해야합니다 참조하십시오. 세션이 비어

if($_SESSION['authorizedreferral'] == false) 

, 그래서 PHP는 '널'을 반환하도록 세션에는 authorizedreferal 값은 없다 (그리고 : 귀하의 첫 번째 경우() 절은 항상 있기 때문에 PHP의 타입 캐스팅 규칙으로, true로 평가합니다 unset 키 경고). PHP의 타입 캐스팅 규칙에 따라 null == false이 TRUE입니다.

당신은 사용자의 로그인이 (쿠키에 그 보관하지 마십시오 - 세션에 저장) 있는지 확인하는 로직을 변경해야

및 로그인 페이지로 리디렉션 :

session_start(); 
if (!isset($_SESSION['loggedin']) || ($_SESSION['loggedin'] === false)) { 
    header("Location: login.php"); 
} 

정말 사실 부울로 설정 된 authorizedreferral 값이 있다면

if ($_SESSION['authorizedreferral'] !== true) { 
    ... 
} 

성공할 것이다 : 다른 대안은 엄격한 비교 연산자를 사용하는 것입니다. 그래도 새로운 사용자에게는 경고가 표시되지 않을 수 있습니다.

+0

굉장 -'==='또는 기본 세션 설정에 대해 알지 못했습니다. 매우 도움이된다! – Jared

관련 문제