会议未得到承认

时间:2013-03-01 15:47:54

标签: php session cookies

我昨天花了大约45分钟尝试研究和解决这个问题,所以希望有人能够尝试另一个想法。

它开始时我的一个PHP脚本检测到会话$_SESSION为空,所以它停止执行其余的并为我抛出错误。

整个项目在该服务器上工作至少半年没有任何问题,并且从那时起没有对代码或服务器进行更新。

以下是我的所作所为: 我创建了一个用于测试的新PHP文件,确保在<?php ?>容器之前或之后没有任何内容,并编写了此代码:

session_start();
var_dump($_SESSION);
$_SESSION['test'] = 5;

然后我反复运行该文件,它总是想出一个空的会话。

之前我遇到过这个问题,所以我检查了服务器上会话文件所在的文件夹(在我的情况下为/var/lib/php5),确保它具有正确的目录所有者和权限,删除了所有文件在它并重新启动apache。 没有骰子......

我再次运行该文件几次,每次运行都创建了一个新的会话文件,并且会话文件确实包含了test = 5条目,因此会话可以正确写入。

所以我检查了浏览器的cookies。他们在那里工作,据我所知 - phpsessid cookie和我的网站创建的另一个cookie都在那里。如果我删除所有cookie然后再次运行我的测试文件,phpsessid cookie将正常重新创建,并且包含作为会话文件创建的相同会话ID。

我还在var_dump(session_id());之后的代码中添加了session_start();,每次脚本运行时它都会给我一个全新的会话ID。

我们正在运行一个不支持session_status()的PHP版本,所以这也不是一个选项(不确定它究竟会做什么,无论如何,我在这里相当盲目地飞行)。

因此,我们知道会话已正确创建,文件包含数据,cookie包含正确的ID。

据我所知,问题必须在于浏览器没有将cookie数据发送回服务器,或者服务器没有将cookie中的会话ID识别为现有会话。

在我测试时,Firefox希望安装更新,因此我运行了更新,但没有更改。 Firefox设置为接收cookie,我没有在任何阻止它们的地方找到任何异常集。

鉴于这已经运行了6个多月了,一些怪异的事故必定已经损坏了一些东西,但我对Linux或PHP和会话的内部工作方式知之甚少,甚至不知道开始诊断的位置。

在某些时候,我确实尝试了session_write_close()并没有改变任何东西(我的整个项目在没有它的情况下一直很好)。

唯一有用的是:

 $c = $_COOKIE['phpsessid'];
 session_name($c);
 session_start();
 var_dump($_SESSION);
 $_SESSION['test'] = 5;

但我在大量网页中使用session_start并且不想通过所有页面输入我不应该首先需要的代码......

有什么想法吗?

提前致谢!

---编辑---

我再次检查了问题,我可以确认Cookie名称是phpsessid而不是PHPSESSID(感谢您指出这一点,@ Corpra_Fast),这样就越接近原因了这个问题。我进入php.ini文件将session.name的值放入引号,然后重新启动apache,但仍然没有变化 - cookie名称仍为小写。我还没有在计算机上找到防病毒程序,我怀疑是否有任何网络安全可以做到这一点......如果PHP设置已经损坏,如@Cobra_Fast建议的那样,怎么能修复?刚刚编辑文件没有帮助......

1 个答案:

答案 0 :(得分:2)

经过多次测试后,我们发现了一个非常奇怪的事情: 只有一台客户端计算机受此影响!我们在另一台计算机上运行代码,它运行正常,会话cookie被正确编写和读取。 所以服务器根本不起作用! 我不知道这台计算机如何将cookie名称转换为小写 - 根本没有意义,特别是因为它发生在两个浏览器中...... 但至少我们对这种情况有一个“修复”,因为他们立即说他们要检查那台电脑并在需要时重新安装它,所以它不在我们手中。 我现在对此非常感到困惑,但至少它结束了:-) 谢谢你的回复!