2011-03-18 93 views
0

我正在写一个PHP网站。我有一个$_SESSION['id'],它包含用户的用户名,我将在后面的脚本中使用这个值。不过,我注意到ID在我浏览网站时发生了变化。会话ID值更改

id以任何方式保留?或者,我应该将id更改为其他内容吗?

只要我多次点击一个按钮,就会发生这个问题。我100%确定在初始登录后我没有改变$_SESSION['id']

有人能帮我理解发生了什么,以及如何解决问题。

+0

它改变了什么?没有?或者实际价值改变了吗? – ircmaxell 2011-03-18 22:39:51

回答

2

我会假设你已经使用session_start,如果看不到其他意见:P

如果您对注册全局变量,你可能会如果在代码中使用变量$id,则会看到类似的行为。作为测试,请尝试:

<?php 
session_start(); 
$_SESSION['testing'] = 'Foo'; 
$testing = 'bar'; 
die($_SESSION['testing']); 
?> 

重新加载页面几次。如果bar打印出来而不是Foo,那可能是您的问题。您可能想要使会话变量名称不太可能在其他地方使用,或者(更正确)关闭注册全局变量。

+0

令人惊叹!当我运行我的脚本我得到了Foo,在下次刷新时我得到了所有的时间吧..请你解释一下这个奇怪的行为,以及我如何在代码中解决这个问题 – TDSii 2011-03-18 22:48:17

+0

脚本启动时,'$ _SESSION ['id'] '被填充,但'$ id'也是一样的。当你改变'$ id'时,它改变'$ _SESSION ['id']',但是直到下一页加载。所以通常情况下,您不希望在变量中使用'$ _SESSION'中的同一个键。请记住,只有在注册全局变量时才会发生这种情况,并且有风险。 (ini_get('register_globals')== 1) \t die(“你必须禁用php脚本中的register_globals才能使这个脚本正常工作。”)( – steveo225 2011-03-18 22:51:57

+0

)只需将此文件添加到每个文件顶部包含的配置文件 。 ; – TDSii 2011-03-18 23:03:57

0

确保您在页面的最顶端(即其他任何地方)拨打session_start()

这可能会导致拧紧。

一个非常简要总结,为什么你需要这样做:

大多数的会话ID(从$ _SESSION不同[“身份证”],不用担心)通过cookie的存储时间。 cookie值是通过响应头发送的,这些头文件需要首先发送回客户端。所以如果你在调用session_start()之前输出ANYTHING,你实际上是在强制PHP发送响应头文件。这将导致响应标头不包含cookie会话值,因此无法正确使用会话。