首先,我们使用Yii框架来创建我们的网站,它正在处理cookie的创建。
我们有一个包含许多子域的站点,因此主站点具有".sitename.com"的会话cookieParams。
像这样:
- www.sitename.com
- a.sitename.com
- b.sitename.com
- admin.sitename.com
我们有www
、a
和b
来共享同一个会话cookie,这很好用。
特殊的管理子域,它具有不同的用户系统和登录机制,因此我们有一个单独的会话cookieParam"admin.sitename.com"。
问题是,如果有人从主站点获取会话 cookie,则登录管理站点将失败,因为主站点的".sitename.com"cookie 似乎优先。删除主站点的 Cookie 可以暂时解决此问题,直到浏览器再次访问主站点。
有没有办法解决这个问题,或者有更好的方法来设置 cookie 域?
谢谢!
最简单的解决方案是使用不同的会话名称。在普通 php 中,您在 session_start(( 之前调用 session_name((。我对Yii框架不是很熟悉,但是类CHttpSession似乎是php函数的薄包装器,它有一个setSessionName((方法。
在检查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',
),
...
),
);