我正在写一个PHP网站。我有一个$_SESSION['id']
,它包含用户的用户名,我将在后面的脚本中使用这个值。不过,我注意到ID在我浏览网站时发生了变化。会话ID值更改
是id
以任何方式保留?或者,我应该将id
更改为其他内容吗?
只要我多次点击一个按钮,就会发生这个问题。我100%确定在初始登录后我没有改变$_SESSION['id']
。
有人能帮我理解发生了什么,以及如何解决问题。
我正在写一个PHP网站。我有一个$_SESSION['id']
,它包含用户的用户名,我将在后面的脚本中使用这个值。不过,我注意到ID在我浏览网站时发生了变化。会话ID值更改
是id
以任何方式保留?或者,我应该将id
更改为其他内容吗?
只要我多次点击一个按钮,就会发生这个问题。我100%确定在初始登录后我没有改变$_SESSION['id']
。
有人能帮我理解发生了什么,以及如何解决问题。
我会假设你已经使用session_start
,如果看不到其他意见:P
如果您对注册全局变量,你可能会如果在代码中使用变量$id
,则会看到类似的行为。作为测试,请尝试:
<?php
session_start();
$_SESSION['testing'] = 'Foo';
$testing = 'bar';
die($_SESSION['testing']);
?>
重新加载页面几次。如果bar
打印出来而不是Foo
,那可能是您的问题。您可能想要使会话变量名称不太可能在其他地方使用,或者(更正确)关闭注册全局变量。
令人惊叹!当我运行我的脚本我得到了Foo,在下次刷新时我得到了所有的时间吧..请你解释一下这个奇怪的行为,以及我如何在代码中解决这个问题 – TDSii 2011-03-18 22:48:17
脚本启动时,'$ _SESSION ['id'] '被填充,但'$ id'也是一样的。当你改变'$ id'时,它改变'$ _SESSION ['id']',但是直到下一页加载。所以通常情况下,您不希望在变量中使用'$ _SESSION'中的同一个键。请记住,只有在注册全局变量时才会发生这种情况,并且有风险。 (ini_get('register_globals')== 1) \t die(“你必须禁用php脚本中的register_globals才能使这个脚本正常工作。”)( – steveo225 2011-03-18 22:51:57
)只需将此文件添加到每个文件顶部包含的配置文件 。 ; – TDSii 2011-03-18 23:03:57
确保您在页面的最顶端(即其他任何地方)拨打session_start()
。
这可能会导致拧紧。
一个非常简要总结,为什么你需要这样做:
大多数的会话ID(从$ _SESSION不同[“身份证”],不用担心)通过cookie的存储时间。 cookie值是通过响应头发送的,这些头文件需要首先发送回客户端。所以如果你在调用session_start()之前输出ANYTHING,你实际上是在强制PHP发送响应头文件。这将导致响应标头不包含cookie会话值,因此无法正确使用会话。
确保您启动会话 - 看session_start();
它改变了什么?没有?或者实际价值改变了吗? – ircmaxell 2011-03-18 22:39:51