2010-01-17 374 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