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

    在搞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');

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