SOHOゆいちのサイト
Sessionを利用したWebアプリを開発していると、同じドメインで複数の環境を用意したときに、セッション変数の中身が混ざってしまうことがよくあります。
そこで、Zend_Session_Namespaceを継承して、INIファイルの値と、アプリケーションのベースURLのパスをつなげてNamespace名称と刷る形にしました。
実際の実装はBsheの以下のクラスを参考にしてください。(ダウンロードはこちら)
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が取得できるようになります。
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ファイルから取得された文字列とアプリケーションのメインパスをつないだ文字をつけるようにしてあります。これにより、同一ドメインで利用してもセッションが重ならないように配慮されます。
www.bshe.org (created by itassist.info)