对于初学者,我们使用Yii框架来创建我们的网站,它正在处理cookie的创建。
我们有一个包含多个子域的网站,因此主网站的会话cookieParams为“.sitename.com”。
这样的事情:
我们有www
,a
和b
来共享相同的会话Cookie,这非常有用。
但是,我们有一个特殊的admin子域,它具有不同的用户系统和登录机制,因此我们有一个单独的会话cookieParam“admin.sitename.com”。
问题是,如果有人从主站点获取会话cookie,登录管理站点将失败,因为主站点的“.sitename.com”cookie似乎优先。删除主站点的cookie会暂时解决问题,直到浏览器再次访问主站点。
有没有解决方法,还是有更好的方法来设置Cookie域?
谢谢!
答案 0 :(得分:2)
最简单的解决方案是使用不同的会话名称。在普通的php中,你在session_start()之前调用session_name()。我对Yii框架不是很熟悉,但是类CHttpSession似乎是php函数的一个瘦包装器,它有一个setSessionName()方法。
答案 1 :(得分:2)
在使用yii
工具了解gii
如何完成此操作后,我在config.php
中设置了以下内容并使其正常运行。
<?php
$config = array(
...
'components'=>array(
...
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
'class' => 'WebUser',
// Create a custom key prefix for the user cookie
'stateKeyPrefix'=>'customkey',
),
...
'session' => array (
// Provide a custom name for the session id to differentiate it
// from the default PHPSESSID
// Cannot use dots in the session id :(
'sessionName' => 'custom_session_id',
// Keep session stored in db for use accross load balancer
'class' => 'system.web.CDbHttpSession',
'connectionID' => 'db',
),
...
),
);