PHP之Session莫名消失之大法

奶茶,这是你深恶痛疾的技术文……

在搞CakePHP,发现一个很有趣的现象。

如果在站点A内,无论页面怎么跳转,Session都是有效的。
比如现在已经有一个$_SESSION[‘user’] = ’emma’;
如果这时候从站点B链接到站点A来,也就是用普通的<a href=’http://site-a.com/page’>link</a>
那么,这个站点A的$_SESSION就会“呼”的一下消失。

这是为什么捏。找了差不多两三个小时。终于很认真地在/cake/libs/session.php中看到如下的一串,这是在function __initSession中写的:

if (function_exists(‘ini_set’)) {
    ini_set(‘session.referer_check’, $this->host);
}

然后去查一下session.referer_check是做啥用的。一切就真相大白了。如果设了这个值为abc.com,那么php就会去check一下HTTP Referer中是否含有abc.com,如果没有,就重新生成一个session id,所以原有的session就会丢失。

从上面的例子来看,在A站点里活动,HTTP Referer都是A站,所以都OK。如果从B站链到A站,那么这个Referer就成了B站点,于是就重新生成了session id,于是就…………咳咳。

solution:
在config/core.php中设置

Configure::write(‘Security.level’, ‘low‘);

同学们,看代码还是有必要的。。。

Copyright © 2008. All Rights Reserved.

发表评论

电子邮件地址不会被公开。 必填项已用*标注