Home  >  Article  >  Backend Development  >  学习php时候session这一章的一个问题。

学习php时候session这一章的一个问题。

WBOY
WBOYOriginal
2016-06-06 20:42:201093browse

最近在学习PHP,用了细说PHP这本书,学习session的时候发现一个很奇怪的问题。

用下面的pdo对mysql 查询,然后把获得的id 和username信息存入$_session中

<code>$statement = $pdo->prepare("SELECT id,username FROM user WHERE username = ? and userpwd = ?");
$statement->execute(array($_POST["username"],md5($_POST["password"])));
$_SESSION = $statement->fetch(PDO::FETCH_ASSOC);
</code>

在另一个页面用下面这个语句 根据session里的id 取出需要的信息

<code>$statement = $pdo->prepare("SELECT id,mailtitle,maildt FROM mail WHERE uid = ?");
$statement->execute(array($_SESSION["id"]));
list(id,$mailtitle,$maildt) = $statement->fetch(PDO::FETCH_NUM)
</code>

但是问题出现了。第2个页面执行完毕后在服务器里的session文件里保存的id信息会变成页面里id这个变量的值。

也就是说第2个页面执行后变量$id 会回传进session文件里更新掉里面的值。。。

有这种机制?

回复内容:

最近在学习PHP,用了细说PHP这本书,学习session的时候发现一个很奇怪的问题。

用下面的pdo对mysql 查询,然后把获得的id 和username信息存入$_session中

<code>$statement = $pdo->prepare("SELECT id,username FROM user WHERE username = ? and userpwd = ?");
$statement->execute(array($_POST["username"],md5($_POST["password"])));
$_SESSION = $statement->fetch(PDO::FETCH_ASSOC);
</code>

在另一个页面用下面这个语句 根据session里的id 取出需要的信息

<code>$statement = $pdo->prepare("SELECT id,mailtitle,maildt FROM mail WHERE uid = ?");
$statement->execute(array($_SESSION["id"]));
list(id,$mailtitle,$maildt) = $statement->fetch(PDO::FETCH_NUM)
</code>

但是问题出现了。第2个页面执行完毕后在服务器里的session文件里保存的id信息会变成页面里id这个变量的值。

也就是说第2个页面执行后变量$id 会回传进session文件里更新掉里面的值。。。

有这种机制?

你可以在第二个页面开头打印一下session,在结尾在打印一下,看看是什么原因导致的变化。
我感觉是你session的key值重复了。直接用第二个把第一个替换了

Arrar的key值,在php内存中也是一种变量,变量名重复了

已经找到问题了。
PHP 选项 register_globals里问题。
http://blog.sina.com.cn/s/blog_6e27a45f010161sj.html
php6已经禁用这个选项了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn