PHP添加了“;532142118〃;到会话变量


PHP adds "532142118" to session variable

我遇到了一个非常奇怪的问题,希望能有一个非常简单的解释,但经过数小时的调试,我无法弄清楚发生了什么。

使用LAMP堆栈,php 5.4

这是该系统的简化版本,它仍然再现了一些奇怪的行为。

在一个简单的自制框架中,我制作了一个水平菜单(选项卡),它可以"记住"当该选项卡中的页面用于搜索等时活动的url。因此,如果你稍后返回该选项卡,由于get参数的原因,你可以立即看到最后的搜索结果。

因此,菜单中的一个"选项卡"在这个url上激活:

/customer/2/customer_email/

此变量被放入会话变量中:$_SESSION['tab_menu']['customer_email']=$_SERVER['REQUEST_URI'];

页面刷新或导航到另一个选项卡后,可以从会话中读取选项卡的url。但由于某种原因,存储的url被更改为:

/customer/2/customer_email/532142118

如果我把GET参数放在url后面,同样的奇怪数字会被插入。。。无论过程如何。因此,如果我使用以下网址访问选项卡:

/customer/2/customer_email/?foo=bar

在相同的页面加载中,会话数组将如下所示:

$_SESSION['tab_menu']['customer_email'] = /customer/2/customer_email/?foo=bar

但在我导航到另一个页面后,会话数据将显示:

$_SESSION['tab_menu']['customer_email'] = /customer/2/customer_email/532142118

在代码的最后一点,我通过var_dump($_SESSION)验证了$_SESSIONarray是否正常。我通过在代码开头的SESSION_start()之后转储它的数据,验证了下一次刷新时的$_SESSION数据是否发生了更改。

如果我这样做,为了测试,会话数据中不会添加奇怪的数字:

$_SERVER['REQUEST_URI'] = '/customer/2/customer_email/';

如果我导航到另一个url,同样的问题不会发生:

/customer/3/customer_email/

我尝试了更多的东西:C

  1. 存储会话数组中使用的密钥,但这并不重要
  2. 在另一台服务器上测试,使用相同的设置,但这种情况也不会发生
  3. 我尝试在将url放入会话数组后立即写入会话数据,但这也解决不了任何问题
  4. 将变量$_SERVER['REQUEST_URI']与字符串'/customer/2/customer_email/'进行比较,使用strcmp(),strcasecmp(),在Notepad++中查看为HEX字符,使用stackoverflow或PHP.net上的find函数在PHP中显示为HEX
  5. 在将url放入$_SESSION['tab_menu']['customer_email']之前,尝试对其进行序列化,但随后数字5322142118就神奇地添加到了序列化的数据中
  6. 尝试解码数字532142118,但无法将其与任何内容关联起来。两个星期都没有改变
  7. 已重新启动服务器
  8. 几乎完全重写了控制"选项卡"的logica,系统仍然挂在该服务器变量上

问题:

  1. 什么在更改会话数据?如何进一步调试
  2. 为什么它没有在所有url上发生?几年来,我在几个选项卡上使用了这个系统,这是第一次出现这种奇怪的行为
  3. 为什么在使用$_SERVER变量时会出现这种情况,而不是在将其作为自类型字符串添加时
  4. 这个数字是什么意思?532142118

期待一些反应/输入!

编辑:增加了点7&8到"我尝试过的事情"

终于有答案了!

感谢这个答案,它为我指明了正确的方向:
页面之间的PHP会话变量更改

我制作的页面显示了导入的电子邮件,这些页面在会话中出现了问题。一些电子邮件正在加载不存在的图像,html源为:

<img border="0" width="110" height="114" id="_x0000_i1025" src="532142118" />

因此,在后台,这将加载附加有"532142118"的url,完全集成在网络统计中,不会在屏幕上显示任何可见的var_dumps
在设置会话变量时,我又给自己发了一封函数跟踪电子邮件,以得出页面被多次请求的结论。由于图像源的原因,额外请求的页面会使会话和请求的url发生故障
现在我排除了特定的url请求,不将url放在会话变量中,因此错误的img源不会影响系统:)

感谢大家的投入!