EC-CUBEでハマル。GETの場合はOKでPOSTのときにセッションが切れてたらリダイレクトされるのか。
セキュリティ的に当たり前といえば当たり前だなぁ。。。
セッションはファクトリーパターンでcookieかリクエストパラメータかの分別をしているっぽい。
該当箇所 SC_SessionFactory_UseRequest.php はリクエストパラメータを使う場合。
<?php class SC_SessionFactory_UseRequest extends SC_SessionFactory { /** * セッション初期処理を行う。 * * @return void */ function initSession() { // セッションIDの受け渡しにクッキーを使用しない。 ini_set('session.use_cookies', '0'); // パラメーターから有効なセッションIDを取得する。 $sessionId = $this->getSessionId(); if (!$sessionId) { session_start(); } // セッションIDまたはセッションデータが無効な場合は、セッションIDを再生成 // し、セッションデータを初期化する。 if ($sessionId === false || !$this->validateSession()) { session_regenerate_id(true); // セッションデータの初期化 $this->state->inisializeSessionData(); // 新しいセッションIDを付加してリダイレクトする。 if ($_SERVER['REQUEST_METHOD'] == 'GET') { // GET の場合は同じページにリダイレクトする。 $objMobile = new SC_Helper_Mobile_Ex; header('Location: ' . $objMobile->gfAddSessionId()); } else { // GET 以外の場合はトップページへリダイレクトする。 header('Location: ' . URL_SITE_TOP . '?' . SID); } exit; } // 有効期限を更新する. $this->state->updateExpire(); } /** * セッションデータが有効かどうかをチェックする。 * * @return boolean セッションデータが有効な場合は true、無効な場合は false を返す。 */ function validateSession() { /** * PCサイトでは * ・セッションデータが適切に設定されているか * ・UserAgent * ・IPアドレス * ・有効期限 * モバイルサイトでは * ・セッションデータが適切に設定されているか * ・機種名 * ・IPアドレス * ・有効期限 * ・phone_id * がチェックされる */ return $this->state->validateSessionData(); }
ちなみにrequire_base.phpで呼ばれたりする。
<?php // セッション初期化・開始 require_once CLASS_PATH . 'session/SC_SessionFactory.php'; $sessionFactory = SC_SessionFactory::getInstance(); $sessionFactory->initSession();