2013-06-03 69 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語句中包含一些日誌記錄(如果你沒有一個好的調試器)到文件中。將相關的cookies /其他變量的值寫入文件並指定它們來自哪個condiition。每次用戶clikcs註銷時,都會執行$ _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

write ob_start();在註銷頁面頂部 – ankit

0

直到頁面重新載入後,瀏覽器才能識別cookie更改。

你的第一次點擊是取消設置的cookie,但用戶仍然登錄。
你的第二個點擊的是「重裝」的頁面,在這裏的餅乾現在都沒有設置,它似乎工作。

將重定向添加到同一頁面(在刪除和銷燬會話之後)以模擬刷新,並且您的按鈕應該可以工作。

p.s.
這是一個餅乾如何工作的簡化版本,但它基本上是準確的。 由於您在服務器上取消設置Cookie,您必須再次請求該頁面才能獲得不包含舊Cookie信息的新HTTP標頭。這是重新加載的功能。