0

首先,我们使用 Yii 框架来创建我们的站点,它正在处理 cookie 的创建。

我们有一个包含许多子域的站点,因此主站点的会话 cookieParams 为“.sitename.com”。

像这样的东西:

  • www.sitename.com
  • a.sitename.com
  • b.sitename.com
  • admin.sitename.com

我们有wwwab共享同一个会话 cookie,这很好用。

但是,我们有一个特殊的管理子域,它具有不同的用户系统和登录机制,因此我们有一个单独的会话 cookieParam “admin.sitename.com”。

问题是,如果有人从主站点获取会话 cookie,登录管理站点将失败,因为主站点的“.sitename.com”cookie 似乎具有优先权。删除主站点的 cookie 可以暂时解决问题,直到浏览器再次访问主站点。

有什么办法可以解决这个问题,还是有更好的方法来设置 cookie 域?

谢谢!

4

2 回答 2

2

最简单的解决方案是使用不同的会话名称。在普通的 php 中,你在 session_start() 之前调用 session_name()。我对 Yii 框架不是很熟悉,但是 CHttpSession 类似乎是 php 函数的一个薄包装器,它有一个 setSessionName() 方法。

于 2012-05-19T03:10:58.010 回答
2

在 ispecting 如何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',
        ),
        ...
    ),
);
于 2012-06-22T02:59:03.037 回答