EC-CUBE3のリファラの取り方
まず最初はセッションを使って、一旦ランディングページにアクセスしたか?
と言う事を記録して、それによってページの要素の出し分けをしたい。と言う事を考えていたがEC-CUBEの仕様上、セッションやは /app/cache/eccube/session内にデフォルトでは登録される。
その為、ランディングページ等でセッションを登録し、EC-CUBEのシステム内のページに遷移するとセッションが消えている。
Cookieも同様にランディングページで設定したCookieが引き継がれない。
と言う事で、少し変化球ではあるものの、ページ内のリファラを参照し自ドメイン内のアクセスであれば処理はそのまま。
自ドメイン「以外」のドメインからのアクセスの場合は要素を変更させる。と言う処理を入れてみる。
通常の場合
何も無い場合は以下
$referer = $_SERVER['HTTP_REFERER'];
「普通」の場合はコレで取得出来る。しかしEC-CUBE3だとコレでもダメ。
他ドメインからアクセスしても、自ドメインにアクセスした。とみなされてしまう。
EC-CUBE3の場合
トップページでの判定
/src/Eccube/Controller/TopController.php
public function index(Application $app) { $referer = $app['request']->headers->get('referer'); if(!preg_match("/{$hogehoge.com}/",$referer)){ header("Location: 任意のページ"); exit; }
$refererを取得する所がミソで、$app内から取得する。取得したリファラが自ドメイン「以外」だったらリダイレクトと言う処理を噛ませている。
グローバルの変数もEC-CUBE内では操作する事が難しいので、今後その辺は「出来る」ようにしていかねばならないが、とりあえず急場しのぎと言う事で。