随机页面上的以下代码输出为:
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 :(得分: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服务器)。
答案 1 :(得分:2)
这很奇怪......你确定你没有在任何地方做$_SESSION['uid']++
吗?
另外,你有register_globals
吗?
答案 2 :(得分:1)
register_globals
默认情况下应该关闭。
在任何地方都有session_register
的电话吗?