2009年3月31日火曜日

CakePHP でドメインの異なるサイトでセッションを共有する

2009年3月31日火曜日

これは簡単なティップですが、ドキュメントとしてここに記しておきます。ドメインの異なる CakePHP サイトでセッションを共有する方法を紹介します。

2つのドメインの異なるサイト siteA.com と siteB.com があるとします。siteA.com にいるログイン認証済みのユーザがあるリンクをクリックして siteB.com へ移動するとき、セッション情報を保持したままリダイレクトするようにします。

まず、設定する項目がいくつかあります。

  • siteB.com のコアファイル (/app/config/core.php) の 'Security.level' を 'low' に設定します。 'high' and 'medium' に設定すると、埋め込まれたセッションID は無効だと判断されます。
  • セッション・ハンドリング・メソッド(app/config/core.php 内の 'Session.save') を 'php' か 'database' にします。siteA.com と siteB.com のセッション・ハンドリング・メソッド (Session.save) を同じにする必要があります。2つのサイトが同じセッションストーレッジを使用してセッションを共有するようにします。
  • 両サイトとも同じ Security.salt (/app/config/core.php) を使用します。
siteA.com のビューで、次のようにセッションIDをリンクに埋め込みます。
echo $html->link('Go to siteB.com',
 "http://siteB.com/tests/index?sid=" . $session->id()
);
受け手側の siteB.com の任意のコントローラ、beforeFilter メソッド内で, $this->Session->id($this->params['url']['sid']) を使います。
function beforeFilter() {
  if (!empty($this->params['url']['sid'])) {
    $this->Session->id($this->params['url']['sid']);
  }
}
ユーザが siteA.com のリンクをクリックすると、siteB.com へリダイレクトして、パラメータとして渡されたセッションIDから新しいセッションIDを生成します。

0 コメント:

コメントを投稿

 
JamNite Japan ◄Design by Pocket, BlogBulk Blogger Templates