2013-06-03 1 views
0

저는 직관적으로 단순해야하는 문제에 도움을 줄 수 있으면 좋겠지 만 그 답은 나를 피할 수 있습니다. 내 사용자가 로그 아웃 할 때 몇 가지 이유로 로그 아웃을 두 번 눌러야 만 작동합니다. 나는 이것을 읽은 :로그 아웃 문제 - 로그 아웃을 두 번 클릭해야합니다.

Any idea why I have to click the logout button twice to logout?

그러나 그것은 작동하지 않는 것 같습니다. 여기에 내 로그 아웃 버튼 코드가 ​​있습니다. 이견있는 사람? 고맙습니다!

 <div id="loginStatusWrap"> 
      <div id="loginStatus"> 
    <?php 
    include('includes/APILogin.php'); 


    if (isset($_POST['logout_btn'])) 
    { 
     unset($_COOKIE['kp_emailID']); 
     unset($_COOKIE['kp_pass']); 
     session_destroy(); 
    } 


    // Check for login cookie - skip if session is available 
    if (isset($_COOKIE['kp_emailID']) && isset($_COOKIE['kp_pass']) && !isset($_SESSION['kp_accountID'])) 
    { 
     $username = $_COOKIE['kp_emailID']; 
     $pass = $_COOKIE['kp_pass']; 
     $get_account_parameters = array(
           'session' => $session_id, 
           'module_name' => 'kd_kp', 
           'query' => "kd_kp_cstm.username_c = '" . $_COOKIE['kp_emailID'] . "'", 
           'order_by' => "", 
           'offset' => '0', 
           'select_fields' => array(
                //'username_c', 
                //'password_c', 
                //'id', 
                //'name', 
                ), 
           'link_name_to_fields_array' => array(), 
           'max_results' => '1', 
           'deleted' => '0', 
           'Favorites' => false, 
           ); 
     $get_account_result = call('get_entry_list', $get_account_parameters, $url); 
     //echo '<pre>'; print_r($get_account_result); echo '</pre>'; 

     if ($_COOKIE['kp_pass'] != $get_account_result->entry_list[0]->name_value_list->password_c->value) 
     { 
      // not logged in 
      session_unset(); 
      session_destroy(); 
      ?> 
       <div id="loginForm"> 
        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
         <input type="text" placeholder="EMAIL" value="<?=$_COOKIE['kp_emailID']?>" name="signIn_email" id="signIn_email"/> 
         <input type="password" placeholder="PASSWORD" id="signIn_pwd" name="signIn_pwd" /> 
         <input type="submit" value="SIGN IN" name="login_btn" id="login_btn" /> 
         <!--input type="submit" value="SIGN UP" name="signup_btn" id="signup_btn" /--> 
        </form> 
       </div><!-- //logInForm --> 
      <?php 
     } else { 
      // is logged in 
      $_SESSION['kp_accountID'] = $get_account_result->entry_list[0]->name_value_list->id->value; 
      $_SESSION['kp_name'] = $get_account_result->entry_list[0]->name_value_list->name->value; 
      // set cookies 
      $hour = time() + 3600; 
      setcookie("kp_emailID", $get_account_result->entry_list[0]->name_value_list->email1->value, $hour, "/", "kp.com"); 
      setcookie("kp_pass", $get_account_result->entry_list[0]->name_value_list->password_c->value, $hour, "/", "kp.com"); 
      ?> 
      <div id="loginForm"> 
       <h1>WELCOME, <?=$get_account_result->entry_list[0]->name_value_list->name->value?> 
       <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> 
       <input type="submit" value="LOG OUT" name="logout_btn" id="logout_btn" /> 
       </form> 
      </div> 
      <?php 
     } 
    } 

    //if the login form is submitted 
    if (isset($_POST['login_btn'])) 
    { 
     // checks it against the database 
     if (!get_magic_quotes_gpc()) 
     { 
      $_POST['signIn_email'] = addslashes($_POST['signIn_email']); 
     } 

     $get_account_parameters = array(
             'session' => $session_id, 
             'module_name' => 'kd_kp', 
             'query' => "kd_kp_cstm.username_c = '".$_POST['signIn_email']."'", 
             'order_by' => "", 
             'offset' => '0', 
             'select_fields' => array(
                //'username_c', 
                //'password_c', 
                //'id', 
                //'name', 
                ), 
             'link_name_to_fields_array' => array(), 
             'max_results' => '1', 
             'deleted' => '0', 
             'Favorites' => false, 
             ); 
     $get_account_result = call('get_entry_list', $get_account_parameters, $url); 

     //Gives error if user dosen't exist 
     if ($get_account_result->result_count == 0) 
     { 
      ?> 
      <div id="loginForm"> 
       <a href='/sign-up.php'>Click Here to Register</a> 
      </div> 
      <?php 
     } 

     $_POST['pass'] = md5(stripslashes($_POST['signIn_pwd'])); 

     //gives error if the password is wrong 
     if ($_POST['pass'] != stripslashes($get_account_result->entry_list[0]->name_value_list->password_c->value)) 
     { 
      //if (!isset($get_account_result->entry_list[0]->name_value_list->password_c->value)) 
      { 
      ?> 
      <div id="loginForm"> 
        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
        <input type="text" placeholder="EMAIL: TRY AGAIN" name="signIn_email" id="signIn_email"/> 
        <input type="password" placeholder="PASSWORD" id="signIn_pwd" name="signIn_pwd" /> 
        <input type="submit" value="SIGN IN" name="login_btn" id="login_btn" /> 
        <!--input type="submit" value="SIGN UP" name="signup_btn" id="signup_btn" /--> 
       </form> 
      </div><!-- //logInForm --> 
      <?php 
      } 
      //echo '<pre>'; print_r($_POST); echo '</pre>'; 
     } else { 
      // if login is ok then we update session vars 
      $_SESSION['kp_emailID'] = stripslashes($_POST['signIn_email']); 
      //$_SESSION['kp_pass'] = $_POST['pass']; 
      $_SESSION['kp_accountID'] = $get_account_result->entry_list[0]->name_value_list->id->value; 
      $_SESSION['kp_name'] = $get_account_result->entry_list[0]->name_value_list->name->value; 
      ?> 
      <div id="loginForm"> 
       <h1>WELCOME, <?=$get_account_result->entry_list[0]->name_value_list->name->value?></h1> 
      <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> 
       <input type="submit" value="LOG OUT" name="logout_btn" id="logout_btn" /> 
       </form> 
      </div><!-- //logInForm --> 
      <?php 
     } 
    } else { 
     // check for active session 
     if (isset($_SESSION['kp_accountID'])) 
     { 
     ?> 
     <div id="loginForm"> 
      <h1>WELCOME, <?=$_SESSION['kp_name']?></h1> 
      <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> 
      <input type="submit" value="LOG OUT" name="logout_btn" id="logout_btn" /> 
      </form> 
     </div> 
     <?php 
     } else { 
     // if they are not logged in 
     ?> 
     <div id="loginForm"> 
      <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
       <input type="text" placeholder="EMAIL" name="signIn_email" id="signIn_email"/> 
       <input type="password" placeholder="PASSWORD" id="signIn_pwd" name="signIn_pwd" /> 
       <input type="submit" value="SIGN IN" name="login_btn" id="login_btn" /> 
       <!--input type="submit" value="SIGN UP" name="signup_btn" id="signup_btn" /--> 
      </form> 
     </div><!-- //logInForm --> 
    <?php 
     } 
    } 

    //echo '<div style="float:left;"><pre>'; print_r($_POST); echo '</pre></div>'; 
    //echo '<div style="float:left;"><pre>'; print_r($_SESSION); echo '</pre></div>'; 
    //echo '<div style="float:left;"><pre>'; print_r($_COOKIE); echo '</pre></div>'; 
    ?> 

       <div class="clear"></div> 
      </div><!-- //loginStatus --> 
     </div><!-- //loginStatusBar --> 
    <!-- END loginbar.php !--> 

감사합니다!


+0

더 많은 코드를 제공하십시오. 그렇지 않으면 우리는 잘못된 정보 만 추측 할 수 있습니다. – bestprogrammerintheworld

+0

이 페이지에 전체 코드를 제공했습니다 - – lobstahcrushah

+0

각 if 문에서 파일에 대한 로깅 (좋은 디버거가없는 경우)을 포함하여 시작할 것입니다. 쿠키/다른 변수의 관련 값을 파일에 쓰고 어떤 조건에서 왔는지 명시하십시오. $ _POST [ 'logout_btn']는 예를 들어 사용자가 로그 아웃 할 때마다 실행됩니까? – bestprogrammerintheworld

답변

4

아마도 사용자가 로그인했음을 보여주는 페이지 부분이로드되기 전에이 코드가 실행되지 않았기 때문일 수 있습니다. 따라서 HTML은 그가 로그인했지만 실제로는 그렇지 않다는 것을 보여줍니다.

+0

위의 코드를 편집하여 전체 시작 – lobstahcrushah

+0

+1을 표시하면 HTML이 if 문 아래에있을 가능성이 큽니다. 시도 할 방법은'session_destroy' 바로 뒤에'header ("Location : this_page 또는 index.php")'입니다. –

0

세션을 삭제 한 후 로그인 페이지로 리디렉션하여 페이지를 새로 고칩니다.

+0

머리글을 넣습니다 ("location : index.php"); 하지만 로그 아웃시 리디렉션되지 않습니다 ... – lobstahcrushah

+0

ob_start(); 로그 아웃 페이지 상단에 – ankit

0

브라우저는 페이지를 다시로드 할 때까지 쿠키 변경을 인식하지 않습니다.

첫 번째 클릭으로 쿠키가 설정되어 있지만 사용자가 로그인 한 상태로 유지됩니다.
두 번째 클릭으로 쿠키가 해제되어있는 페이지가 "다시로드"되고 있습니다.

새로 고침을 시뮬레이트하기 위해 동일한 페이지에 리디렉션을 추가하면 (세션을 설정 해제하고 파괴 한 후) 버튼이 작동합니다.

p.s.
이것은 쿠키의 작동 방식을 단순화 한 버전이지만 기본적으로 정확합니다. 서버에서 쿠키를 설정 해제하기 때문에 이전 쿠키 정보가 포함되지 않은 새 http 헤더가 주어 지도록 페이지를 다시 요청해야합니다. 그것이 재 장전이 할 것입니다.