loginuserid をセッションに保存し、ログアウト時にセッションを破棄します。ログインとログアウトは正常に機能しますが、私の問題は、ユーザーがログアウトして戻るボタンを押しても、訪問したページを開くことができ、実際にログアウトした場合でもです。
ページを更新すると、ユーザーはログインページに移動します。ユーザーが戻るボタンを押しても、訪問したページに移動しないようにします。私を助けてください 。前もって感謝します 。
loginuserid をセッションに保存し、ログアウト時にセッションを破棄します。ログインとログアウトは正常に機能しますが、私の問題は、ユーザーがログアウトして戻るボタンを押しても、訪問したページを開くことができ、実際にログアウトした場合でもです。
ページを更新すると、ユーザーはログインページに移動します。ユーザーが戻るボタンを押しても、訪問したページに移動しないようにします。私を助けてください 。前もって感謝します 。
これは実際にはブラウザのキャッシュが原因です。キャッシュが必要な場合は、これを無効にして、CodeIgnitersキャッシュライブラリを使用する必要があります。
ユーザーがログインする必要があるページに以下を追加します。
//Prevent browsers from using history to browse in the user system.
$this->CI->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->CI->output->set_header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$this->CI->output->set_header("Pragma: no-cache");
ブラウザを押し戻すと、ページが更新されます。
ページが表示される理由は、ブラウザがページをキャッシュから取得しているためです。キャッシュからページを表示してはならないことをブラウザに示すには、アプリのすべての安全なページのno-cache
内部にメタタグを追加します。<head>
<meta http-equiv="Cache-Control" content="no-cache" />
キャッシュを避けたくない場合のもう1つの方法(少し複雑)は、安全なページを開くたびにユーザーがログインしているかどうかを確認するために、JavaScriptでサーバーにAJAX呼び出しを行うことです。このようなもの:
$.getJSON('/user_logged_in.php', function(loggedIn) {
if(!loggedIn)
window.location.href = '/login.php';
});
スクリプトはuser_logged_in.php
TRUEまたはFALSEを返す必要があります。
お役に立てれば。
2 つの問題があります。
最初の問題は、セッションをクリアしていても、保存されたキャッシュによってページにアクセスされることです。
したがって、キャッシュをクリアするか、キャッシュを保存しないでください。__construct 関数のコードのすぐ下にあります。
$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false);
$this->output->set_header('Pragma: no-cache');
ログイン後にリダイレクトしている前のページに移動している場合でも、この手順を実行した後、
ユーザーがログインしているかどうかは、認証されたページで確認できます。ログインしていない場合、そのページに移動することはできません。
例:
public function after_log_in()
{
if(!empty($SESSION['username'] && $SESSION['os_logged_in'] == true))
{
$this->load->view('clienview');
}
else
{
echo "You are not logged in!";
}
}
そのため、ログアウト後、戻るボタンを押すと、ユーザーがログインしているかどうかがチェックされます。ログインしていない場合は、エラーが表示されます。