ユーザーがページへのリンクをクリックして、そのページへの閲覧アクセスを 1 時間だけ許可するにはどうすればよいですか?
時間の終わりに、タブ/ウィンドウを閉じるか、ユーザーを別のページに送りたいと思います。
フレームワークとして CodeIgniter を使用しています。
これはどのように行うことができますか?
ユーザーがページへのリンクをクリックして、そのページへの閲覧アクセスを 1 時間だけ許可するにはどうすればよいですか?
時間の終わりに、タブ/ウィンドウを閉じるか、ユーザーを別のページに送りたいと思います。
フレームワークとして CodeIgniter を使用しています。
これはどのように行うことができますか?
ビューにメタ リフレッシュを配置して、ユーザーを必要なページに移動させることはできませんか?
これらの行に沿ったもの:
<meta http-equiv="refresh" content="3600; url=http://example.com/">
ウィンドウ/タブを閉じようとしている場合は、少しJavaScriptを使用できると思います
<script>
setTimeout(360000, function(){
window.top.close();
});
</script>
そのスクリプトが本来あるべきことを正確に実行しない場合は、私を許してください。そのようなものを使用してから非常に長い時間が経ちました。
これはCookieを使用して行うことができます。アイデアは、タイムスタンプを使用してデータベースに保存するアクセストークンを使用してCookieを作成することです。
したがって、ユーザーがデータベースにアクセスできるようになると、ランダムな文字列を作成してデータベースに挿入します。CodeIgniterを使用すると、これは次のような方法で実行できます。
$this->load->helper('string');
$tokenKey = random_string('alnum', 32);
$this->db->insert('tokens', array('userid' => $userid, 'key' => $tokenKey));
テーブルには、トークンが作成されたときのtokens
タイムスタンプも含まれている必要があります。これは、Cookieに有効期限を追加しても、これをいじくり回すことができるためです。したがって、このダブルチェックを行わなかった場合、ユーザーはページに永続的にアクセスできる可能性があります。
次に、実際にCookieを設定します。有効期限を現在+3600秒(今から1時間後)に設定しました。
setcookie('tokenKey', $tokenKey, time()+3600, '/');
ユーザーが保護されたページにアクセスしようとするたびに、1時間以上経過したすべてのトークンを削除して(期限切れのトークンが保存されていないことを確認するため)、トークンがテーブルに存在するかどうかを確認できます。もしそうなら、それは1時間未満です。
// delete old tokens
$tokenKey = $_COOKIE['tokenKey'];
// select token from database
または、cronjobまたはその他のスケジュールされたイベントを使用して、期限切れのトークンをクリーンアップし、古いレコードの削除にかかる余分な時間からクライアントを節約することもできます。サイトのサイズによっては、この時間がかなり長くなる可能性があります。