日期:2014-05-17  浏览次数:20423 次

某IP访问站点无法存储SESSION变量,第一次遇到这样怪异的问题。
请先看代码,测试用PHP页面代码如下:
PHP code

<?php session_start();

if(isset($_SESSION["Count"]))

{

$count = $_SESSION["Count"];

}

else

{

$count=0;

}

$count++;

echo 'Count:'.$count.'<br/>';

echo 'ID:'.session_id();

$_SESSION["Count"]=$count;

?>


----------------------------------
毋庸置疑,这段代码是绝对正确的,在本地PHP5.2+APACHE主机上测试结果:
------------------
==第一次刷新页面==
Count:1
ID:60499dfb22e443a89f5f8ef161570fb0
==第二次刷新页面==
Count:2
ID:60499dfb22e443a89f5f8ef161570fb0
==第三次刷新页面==
Count:3
ID:60499dfb22e443a89f5f8ef161570fb0
------------------
然而,当我把这段代码存成网页,上传到我在美国买的一个PHP5.2+APACHE空间上后,问题来了!!

用我本地网络访问此页面的测试结果:
------------------
==第一次刷新页面==
Count:1
ID:b8611df96a9371f930d8838c0cbc5d77
==第二次刷新页面==
Count:1
ID:3ae67bfa8cdf1d116e1c763fb8f7e2d8
==第三次刷新页面==
Count:1
ID:e2fc2942aeb87f63ce2253b0e6cc3a4d
------------------

看到上面的结果,我第一反应就是PHP.INI中SESSION设置有问题,结果翻来覆去验证很久,又拿本地PHP.INI文件上传覆盖,结果都一样。

随后清空FF\IE缓存与COOKIE等,还是一样。又换本网另一台电脑访问,结果依然不行。

没办法,这时我只能认为是服务器有问题,随后找服务商解决。服务商托了一天,告诉我服务器并没有问题,他们测试页面时结果是正确的。

这时我很生气,我这边明明测试的结果是错误的,你们那边怎么就可以?还能是我网络问题?我马上挂代理IP软件访问我的网站,结果得到了正确的运行结果!!!随后又用某在线代理IP网站进行访问,结果也是正确的!!

此时我郁闷了!!这是什么情况?按理说国外服务器IP容易被国内ISP服务商封掉,造成国内无法访问的情况。但是,尼玛这是什么情况啊?明明可以访问,就是每次访问都会产生新的SESSION ID,查看SESSION_SAVE_PATH缓存文件夹,还特么的有缓存文件,这是什么什么情况,实在是搞不懂。

请大哥大姐、大侠小虾们帮帮忙吧,实在是崩溃了!!!拜谢!


------解决方案--------------------
我访问是好的,就是慢了些。你这哪里的服务器?让你输出phpinfo 信息。还有就是你这么频繁操作session不好,session是服务器端的。
------解决方案--------------------
我测试了,你的服务器session是正常的。问题不在服务器 在你自己的网络或者计算机。

------解决方案--------------------
已經測試,沒有問題。
------解决方案--------------------
与网络是不可能有关系的,难道你的包还能半路让人把COOKIE去掉了?

很明显你浏览器没保存COOKIE,你抓包看看你的请求是不是每次没带COOKIE。