php会话/子线程问题

php会话/子线程问题,php,session,Php,Session,我的代码中有一个奇怪的问题,我真的无法解释,它对我来说没有任何逻辑意义。我正在设置一个名为$\u session['user\u id']的会话变量,当一个人成功登录到我的网站并被重定向到index.php页面时。这可以正常工作,会话也可以正常工作,但是一旦我刷新页面,会话中的值就会消失,但我不明白为什么 $long_user_id = $_SESSION['user_id']; $user_id = substr($long_user_id, 0, -3); 有人能看出这里有什么问题吗?我

我的代码中有一个奇怪的问题,我真的无法解释,它对我来说没有任何逻辑意义。我正在设置一个名为
$\u session['user\u id']
的会话变量,当一个人成功登录到我的网站并被重定向到
index.php
页面时。这可以正常工作,会话也可以正常工作,但是一旦我刷新页面,会话中的值就会消失,但我不明白为什么

$long_user_id = $_SESSION['user_id'];

$user_id = substr($long_user_id, 0, -3);
有人能看出这里有什么问题吗?我认为名为
user\u id
的会话变量将保持不变,但由于某些原因,在第二次页面加载后它是空的

提前谢谢


编辑:我没有发布我所有的代码,我犯了一个错误,没有提到我正在使用
session_start()在每一页上。如果我从页面中注释掉代码的
substr
部分,我还想确认代码是否有效。

您必须始终首先通过启动和维护会话,否则您的会话将消失。请注意,因此您必须访问每一页。

这个问题的“解决方案”没有什么意义。出于某种奇怪的原因,$_会话['user_id'];在php脚本中实际存储为$user_id。我无法解释这一点,也不知道它为什么这样做,但它的意思是,当我调整$user_id变量时,它会导致会话出现问题,从而使会话“消失”,正如我前面所说的


这个问题已经通过简单地更改变量名来解决,以确保它们与会话名不冲突。

我在原来的帖子中添加了一个“Edit:”。我正在使用会话\ u start()。我想没有人会认为我忘记了,因为代码的这一部分是导致问题的部分,所以有一个会话自动启动php配置设置IIRC。如果设置了,您不必使用
会话启动()
。您是否激活了
错误报告(E|u ALL | E|u STRICT)
?您可能在会话_start()之前发送了一些内容,一个字节就足以产生问题。你能把你的代码粘贴到pastebin吗?也许我们发现了另一个问题。此外,请检查php.ini是否存在与会话相关的错误,如session.autostart和类似问题。在session_start()之前没有发送任何内容。我在另一条评论中也说过同样的话,但是注释掉substr行可以解决所有问题,会话也可以完美地工作。让那行代码正常工作会引起各种各样的问题,我不知道为什么..我也想不出什么;您是否使用特定的框架来监视变量并自动将更改提交回会话?您所说的“会话中的值消失”是什么意思?不确定?空的?改变?您是否启用了register\u globals=on?我的意思是,如果我回显“long\u user\u id”值,它将消失,没有任何显示。会话仍然存在,因为如果没有,我的代码会自动将我重定向到登录页面,但它没有。该值只是变为NULL(可能,我不确定!)您的PHP版本是什么?您是否正在使用
会话\u register()
寄存器\u globals
?您能否将
错误报告提升到最高级别
ini\u集合(“显示错误”,1);错误报告(~0)?我使用的是PHP版本5.2.9。我没有主动使用session\u register()或register\u globals()执行任何操作,因为我已经使用与这里完全相同的设置创建了数百次这样的代码(没有substr)。唯一的区别是导致会话变为空的substr部分。评论这一行修复了所有问题等,让我觉得这与会话属性无关。我刚刚做了一些奇怪的事情。。我将“$user\u id”更改为不同的变量名,当我回显“$user\u id和$new\u variable”时,得到了两个不同的值。。$user\u id变量与会话值相同。从什么时候起,$user\u id与$\u SESSION['user\u id']具有相同的值????