2012-04-22 109 views
0

我創建的登錄系統最初將用戶記錄爲罰款,用戶將按照預期重定向到索引。但是,當用戶點擊導航鏈接導航到另一個頁面(受限制)時,用戶將被重定向到登錄頁面。當他們再次登錄時,每個頁面都可以正常訪問。PHP登錄腳本需要用戶登錄兩次

我試着打印出會話ID並做了會話數組的轉儲。我注意到,當用戶登錄頁面a時,首先他們有會話ID「x」,然後他們被重定向到索引頁面,他們仍然有會話ID「x」。然而,當他們嘗試導航到網站上的另一個頁面時,他們被重定向到登錄頁面並且會話ID爲「y」。當他們第二次登錄時,每頁顯示他們的會話ID爲「y」。

在用戶重定向後會導致會話ID被更改的原因是什麼?

這是我的登錄腳本。

session_start(); 

    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string(md5($_POST['password'])); 
    $submit = $_POST['submit']; 
    $error = ''; 

    if(isset($submit)){  
    // Check if fields are filled out 
    if($username == '' or $password == ''){ 
     $error = 'Please enter a Username and Password'; 
    }else{ // Proceed with login process 


     // See if user exists 
     $query = mysql_query("SELECT * FROM users WHERE username='$username'"); 

     if(mysql_num_rows($query)<1){ 
      echo 'Invalid Username/Password Combination'; 
     }else{ // Grab user's information 
      $user = mysql_fetch_assoc($query); 

      if($password == $user['password']){//Login Success, Redirect and set Session Vars 


       $_SESSION["loggedIn"] = true; 
       $_SESSION['username'] = $user['username']; 
       $_SESSION['name'] = $user['first']; 
       $_SESSION['auth'] = $user['authorization']; 
       session_write_close();  

       header("Location: home.php"); 
       exit; 

      }else{ 
       $error = 'Invalid Username/Password Combination'; 
      } 
     } 
    } 
    } 

和頁面限制腳本:

session_start(); 

if(isset($_SESSION["loggedIn"])){ 
     echo '<div align="right" id="user">Welcome '.trim($_SESSION['name']).'! <a href="../resources/php/logout.php">Sign Out</a> | <a href="../resources/php/editAccount.php">Edit Account</a></div>'; 
    }else{ 
     header("Location: login.php");  
    } 
+0

你調用session_start( )在*每個*腳本?在通話之前是否有任何意外產生的輸出?我假設你正在使用會話cookie,你的會話cookie傳播不好...... – Bernim 2013-06-12 10:24:41

回答

0

嘗試限制頁面上設置會話變量。

session_start(); 
$_SESSION["loggedIn"] 
$_SESSION["loggedIn"]; 
$_SESSION['username']; 
$_SESSION['name']; 
$_SESSION['auth']; 
0

用於調試的目的,請在每一頁上設置print_r($_SESSION),看看它是否能正確打印......你可以設置一個值,看看它是否攜帶跨頁......