Zend_Sessionで名前空間が重ならないようにする  2009年4月26日

Sessionを利用したWebアプリを開発していると、同じドメインで複数の環境を用意したときに、セッション変数の中身が混ざってしまうことがよくあります。

そこで、Zend_Session_Namespaceを継承して、INIファイルの値と、アプリケーションのベースURLのパスをつなげてNamespace名称と刷る形にしました。

実際の実装はBsheの以下のクラスを参考にしてください。(ダウンロードはこちら

  • ●Bshe_Session_Namespace
  • ●Bshe_Controller_Init

URLパスを取得するクラス

URLのパスなどを取得するメソッドが各所で必要だったため以下のようなクラスを用意しました。

class Bshe_Controller_Init
{
    /**
     * URLのルート(DocumentRootの場合はなし)を返す
     *
     * @return string
     */
    static public function getUrlPath()
    {
        $config = Bshe_Registry_Config::getConfig(‘Bshe_Specializer’);
        $strTmp = str_replace($config->indexphp_path, ”, substr($_SERVER['SCRIPT_NAME'], 0, strlen($_SERVER['SCRIPT_NAME']) – strlen(basename($_SERVER['SCRIPT_FILENAME'])) -1));

        return $strTmp;
    }
}

これによりコードの任意のところで、

Bshe_Controller_Init::getUrlPath()

とすることで、アプリケーションのベースURLが取得できるようになります。

Zend_Session_Namespaceクラスの拡張

class Bshe_Session_Namespace extends Zend_Session_Namespace
{
    public function __construct($namespace = ‘Default’, $singleInstance = false)
    {
        // Bshe_Sessionの設定取得
        $config = Bshe_Registry_Config::getConfig(‘Bshe_Session’);
        // URLから文字列抽出
        $strUrlPath = mb_ereg_replace(‘\/’, ”, Bshe_Controller_Init::getUrlPath());

        parent::__construct($config->session_prefix . $strUrlPath . $namespace, $singleInstance);
    }
}

コンストラクタで、指定されたセッションの名前空間名の頭に、INIファイルから取得された文字列とアプリケーションのメインパスをつないだ文字をつけるようにしてあります。これにより、同一ドメインで利用してもセッションが重ならないように配慮されます。

 

このエントリをはてなブックマークに登録 このエントリをBuzzurlにブックマーク Yahoo!ブックマークに登録 このエントリをlivedoorクリップに登録 Deliciousにブックマーク

コメントを投稿