奇怪的会话行为 - 会话消失

时间:2012-10-26 04:58:49

标签: php session session-cookies

我遇到了PHP和会话的非常奇怪的行为。

我使用的脚本已经工作了几个月,它正在使用各种PHP版本的各种服务器。

脚本读取URL并根据URL重新路由,例如点击/offer/abc1234.html它将调用类商品并将abc1234作为参数传递。

我创建了一个“故障转移”类,换句话说,如果你编写/abc1234.html它将测试各种数据库条目,如果它发现一个自动包含该类,如果它被URL调用,只需要一些额外的开销,不同的是:

  • /offer/abc1234.html :: index.php - > offer.php - > home.php
  • abc1234.html :: index.php - > error.php - > failover.php - > offer.php - > home.php

现在,鉴于这一切都有效并且已经工作了几个月,我的问题在于会话。

如果我点击/offer/abc1234.html,我会看到会话集并将cookie发送到浏览器

如果我按下/abc1234.html会话设置正确,没有错误(E_STRICT + E_ALL),没有警告,没有任何内容,但cookie没有发送到浏览器。我甚至尝试在脚本末尾打印$ _SESSION,并填充会话并且除了标题之外所有变量都是正确的。

我尝试调试它并在各个地方添加各种var_dump,但除了header_list()从不包含session_cookie之外没有什么不同,但它确实包含我手动设置的其他cookie:

我目前正在打印:

  • 会话名称()
  • session_id() - 每次刷新时都会更改,但整页都是一致的
  • session_get_cookie_params()
  • headers_list() - 这不包含session_start应具有的set-cookie标头

输出类似于:

  • string(6)“QSCSID”
  • string(26)“456disv3pl4u2j81dej6h6d717”
  • array(5){[“lifetime”] => int(0)[“path”] => string(1)“/”[“domain”] => string(0)“”[“secure”] => bool(false)[“httponly”] => bool(false)}
  • array(4){[0] => string(38)“Expires:Thu,1981年11月19日08:52:00 GMT”[1] => string(77)“Cache-Control:no-store,no-cache,must-revalidate,post-check = 0,pre-check = 0”[2] => string(16)“Pragma:no-cache”[3] => string(68)“Set-Cookie:spi = 17468; expires = Sat,26-Oct-2013 05:02:23 GMT; path = /”}

再一次,由于一切都在当天早些时候工作,我变得疯狂,然后我重新启动了apache并且它停止了工作。

我已检查过服务器,文件夹未满且可写,文件已创建,当我调用abcd1234.html时文件为空

修改
在处理它时,我开始直接在服务器上通过“ee”(FreeBSD编辑器)打开文件。在我打开/保存课程之前没有任何事情发生,没有对文件进行任何更改,我不小心添加了一个空格并将其删除,然后当我退出时,编辑要求我保存并且我说是。

PHP是使用eaccelerator编译的,我已经删除了缓存文件夹以及重新启动的apache并看到该文件夹​​自动填充。这样的类(failover.php)是一个简单的4函数,其中每个函数都是一个查询,然后构造每次调用一个函数。

所以,它似乎有效,但我想知道是否有人经历过这样的事情,如果他们知道问题可能是什么

1 个答案:

答案 0 :(得分:0)

我无法复制它,一旦我打开文件并在FreeBSD上以“ee”关闭一切正常。