0

手始めに、Yiiフレームワークを使用してサイトを作成し、Cookieの作成を処理しています。

多くのサブドメインを持つサイトがあるため、メインサイトには「.sitename.com」のセッションcookieParamsがあります。

このようなもの:

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

www、、aおよびb同じセッションcookieを共有する必要があり、これはうまく機能します。

ただし、ユーザーシステムとログインメカニズムが異なる特別な管理サブドメインが1つあるため、「admin.sitename.com」の別のセッションcookieParamがあります。

問題は、誰かがメインサイトからセッション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

彼らのツールでこれをどのようにyii達成するかを調べた後、私は自分に次のように設定し、それを機能させました。giiconfig.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 に答える