実現したいこと
WEBサイトへの初回アクセス時のみ特定のページへリダイレクトさせたい。
また、ブラウザによって挙動が異なるので、統一させたい。
PHPのセッションを使用した処理を作成しており、以下の挙動が希望です。
- 初回アクセス時に特定ページへリダイレクト
- その後の別ページへの遷移は普通に行えるようにする
- 再訪時にはまた特定ページへリダイレクト(便宜上15分以上間が空いたら、という設定にします)
英語圏の方向けに、ブラウザの設定言語を判別してランディングページを振り分けたいという理由で作成しているのですが、そもそもセッションを使用するのが妥当なのかというところもあり、良案がありましたらアドバイスをいただけますと幸いです。
尚、海外からのアクセスの判別・リダイレクト手段についてはこちらを参考にさせていただきました。
.htaccessやJavascriptを選択しない理由に得心がいったのでPHPでやろうと思った次第です。
https://kotori-blog.com/php/globalaccess/
発生している問題
Chromeで確認するとタブを閉じるないしブラウザを終了させて15分以上経過してから開いてもセッションが破棄されておらず、var_dump($_SESSION)で見てみると['visit']の値が増えていく状態です。
FireFoxで確認すると15分経っていようがいまいが、ブラウザを終了するとセッションが破棄されているようです。
試したコード
php
1// functions.php 2function redirect() { 3 // 最終アクセスから15分以上経過していたらセッションを破棄 4 if (isset($_SESSION['last_access']) && (time() - $_SESSION['last_access'] > 60 * 15)) { 5 $_SESSION = array(); 6 setcookie(session_name(), '', time() - 42000, '/'); 7 session_destroy(); 8 } 9 session_start(); 10 $_SESSION['last_access'] = time(); // 最終アクセスの更新 11 12 // 初回ならリダイレクト 13 if (!isset($_SESSION['visit'])) { 14 $_SESSION['visit'] = 1; 15 header("Location: /飛ばしたいページ"); 16 exit; 17 } else { 18 // ['visit']の中身の状態を確認するためにカウント 19 $visit = $_SESSION['visit']; 20 $visit++; 21 $_SESSION['visit'] = $visit; 22 } 23}
php
1// 各ページの冒頭で実行 2<?php 3 require_once('functions.php'); 4 redirect(); 5?> 6<!DOCTYPE html> 7<html> 8以下省略
補足情報
サーバ
OS:Linux(詳細不明・XServer)
PHP:7.2.17
PC
OS:MacOSX 10.12
使用ブラウザ:Chrome 78.0.3904.108、FireFox 70.0.1
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/20 08:46
2019/11/20 08:56
2019/11/20 09:08
退会済みユーザー
2019/11/20 09:16
2019/11/20 09:34
2019/11/20 09:44