3

loginuserid をセッションに保存し、ログアウト時にセッションを破棄します。ログインとログアウトは正常に機能しますが、私の問題は、ユーザーがログアウトして戻るボタンを押しても、訪問したページを開くことができ、実際にログアウトした場合でもです。

ページを更新すると、ユーザーはログインページに移動します。ユーザーが戻るボタンを押しても、訪問したページに移動しないようにします。私を助けてください 。前もって感謝します 。

4

3 に答える 3

3

これは実際にはブラウザのキャッシュが原因です。キャッシュが必要な場合は、これを無効にして、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"); 

ブラウザを押し戻すと、ページが更新されます。

于 2012-10-26T18:43:03.130 に答える
2

ページが表示される理由は、ブラウザがページをキャッシュから取得しているためです。キャッシュからページを表示してはならないことをブラウザに示すには、アプリのすべての安全なページの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.phpTRUEまたはFALSEを返す必要があります。

お役に立てれば。

于 2012-10-26T18:52:09.937 に答える
0

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!";
   }
}

そのため、ログアウト後、戻るボタンを押すと、ユーザーがログインしているかどうかがチェックされます。ログインしていない場合は、エラーが表示されます。

于 2016-04-03T22:30:20.147 に答える