2010-01-17 80 views
1

下面的代碼的隨機頁的輸出是:

  print $_SESSION['uid']; // logged in user 
     // Get Data . 
     $uid = $_GET['ID']; // part of random page processing 
      print $_SESSION['uid']; 

是:

1 
2 

我的登錄用戶ID被改變! :@

的登錄密碼(驗證)頁面是這樣的:

 // Authenticate 
     $query = "SELECT * FROM User WHERE Email = '".$Email."' AND Password = '".$Password."'"; 
     $result = mysql_query($query); 

     // Authenticated? 
     if(mysql_num_rows($result)) { 
      // Yes 

      // Set session Vars 
      $uid = mysql_result($result,0,ID); 
      $Access = mysql_result($result,0,Access); 

      session_destroy(); 
      session_start(); 
      $_SESSION['loggedIN'] = 1; 
      $_SESSION['Access'] = $Access; 
      $_SESSION['uid'] = $uid; 

      // Print a successful login and redirect 
+0

順便說一下,'session_destroy'不會刪除'$ _SESSION'數組。這是一個已知的錯誤。 – 2010-01-17 02:06:57

+0

真的嗎? :o那麼清除任何變量的正確程序是什麼? – Bojack 2010-01-17 02:18:43

回答

6

你所看到的是register_globals的副作用。基本上是:

$uid 

$_SESSION['uid'] 

參考同一個變量,所以當你這樣做:

$uid = $_GET['ID']; 

這是等價的:

$SESSION['uid'] = $_GET['ID']; 

我的建議?關閉全局註冊表。它棄用PHP 5.3,將在PHP 6中移除要關閉它,編輯你的php.ini文件,並切換到這個指令:

register_globals = Off 

然後重新啓動Apache(或任何你的Web服務器)。

+0

謝謝,我該如何關閉它? – Bojack 2010-01-17 02:15:56

+0

漂亮的漁獲,+1。 – 2011-08-07 03:33:39

2

這是奇怪...你確定你沒有做$_SESSION['uid']++地方?

另外,你有register_globals

+0

順便說一句,我打4你! – 2010-01-17 02:08:21

+0

不,我想這就是問題:) – Bojack 2010-01-17 02:13:04

+0

@ Chacha102:哈哈,不再是了! :P – 2010-01-17 02:15:07

1

register_globals應該默認關閉。

是否有撥打session_register的地方?

+0

我在php5.2.8上。我還沒有插手配置。和不。 – Bojack 2010-01-17 02:32:35