2010-10-05 21 views
0

我遇到問題,即同一用戶正在生成兩個會話文件。我開始將這些記錄在數據庫中,以便我可以看到發生了什麼。我很想知道這是否源於在課堂上設置課程,或者是否有一些編程失誤背後。爲同一用戶存儲多個會話的問題

session_id session_data 
kfmj13vi5o538mvi57at8th0n2 useradd|s:10:"xx.xx.62.69";redirect|s:10:"/index.php"; 
3bb0fkisndf3u0o1l3195iclh2 UID|s:1:"1";USERNAME|s:9:"kalpaitch"; 

有時候(不總是)時,該類用戶登錄負責添加「UID」和「USERNAME」的會議似乎:下面是我的電腦都會話對方的一分鐘內產生以完全創建新會話(如上所述),因此該頁面不會將用戶註冊爲已經登錄。

這是別人寫的腳本,用以下路徑=> loginform.php要驗證的帖子。 PHP的調用下面的方法。

function validateUser($username,$password, $redirect){ 
     $password=md5($password); 
     if(get_magic_quotes_gpc()){ 
      $username = stripslashes($username); 
      $password = stripslashes($password); 
     }  

     $sql = "SELECT id,username,password FROM users WHERE username='" . mysql_real_escape_string($username) . "' AND password='" . mysql_real_escape_string($password) . "' AND status='1' and verified=1"; 

     $result=mysql_query($sql); 
     $row = mysql_fetch_array($result); 

     if ($row["id"]){ 
      session_start(); 
      $_SESSION["UID"] = $row["id"]; 
      $_SESSION["USERNAME"]=$row["username"]; 
      header("location: http://www.xxx.com".$redirect); 
     }else{ 
      unset($_SESSION["UID"]); 
      unset($_SESSION["USERNAME"]); 

      $sql = "select id,username,password from user where username='" . mysql_real_escape_string($username) . "' and password='" . mysql_real_escape_string($password) . "' and status='1' and verified=0"; 
      $result=mysql_query($sql); 
      $row = mysql_fetch_array($result); 
      if ($row["id"]){ 
       $_SESSION['login'] = 'Verify your account by email'; 
       header("location: http://www.xxx.com".$redirect); 
      }else{ 
       $_SESSION['login'] = 'Incorrect username or password'; 
       header("location: http://www.xxx.com".$redirect); 
      } 
     } 
    } 

回答

2

很有可能這與任何會話cookie設置,cookie-path例如,或cookie-domain的事,特別是當你一個www.domain.tld和純domain.tld網站之間交替;或登錄後調用session_regenerate_id()(這實際上是一個好主意,因爲它避免了會話修復)。