0

codeigniter を使用してアプリケーションを開発しています。このアプリケーションでは、ユーザーがログアウト ボタンをクリックするとセッションの設定が解除されますが、ブラウザの [戻る] ボタンをクリックすると、最後にログアウトしたページが表示されます。

この問題を解決するには?

4

3 に答える 3

2

解決策は、POST とパターン PRG (POST-REDIRECT-GET) を使用することです。

ログアウト ボタンを作成します。

<?php echo form_open('logout');?
<button type="submit">Logout</button>
<?php echo form_close();?>

コントローラーで:

public function logout{

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // destroy session
  $this->session->sess_destroy();
  // redirect to other page
  redirect('login', 'refresh');
 }
}

これにより、「戻る」ボタンの問題が解決され、CSRF 攻撃にも役立ちます。

于 2013-10-15T05:28:29.967 に答える
0
          ##Add this Code in Constructor ##
     ## start Constructor ##
            //**********  Back button will not work, after logout  **********//
        header("cache-Control: no-store, no-cache, must-revalidate");
        header("cache-Control: post-check=0, pre-check=0", false);
        // HTTP/1.0
        header("Pragma: no-cache");
        // Date in the past
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        // always modified
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    //**********  Back button will not work, after logout  **********//
   ## End Constructor ##

public function index(){

        redirect('home/logout');
    }

public function home() { 

               $this->form_validation->set_rules('username', 'User', 'trim|required');
               $this->form_validation->set_rules('password', 'Password', 'trim|required');
               if($this->form_validation->run() AND $data['records'] =$this->task_model->check_login()) 
                     { 
                     $this->session->set_userdata('logged_in',TRUE);
                     $this->load->view('home'); 
                    }
                    else {
                       redirect('task/logout'); 
                       }
                  }

      public function logout(){ 
          $this->session->unset_userdata('userid');
          $this->session->unset_userdata('username');
          $this->session->destroy();
          redirect(base_url());
        }

これを試してみてください。「戻る」ボタンの問題を解決します

于 2013-10-15T11:42:14.700 に答える
0

私はすでにこの種のものを持っています、そして私がしたことはこれです:

あなたのhtaccessで:

 <IfModule mod_headers.c>
 Header add Cache-Control:  "no-store, no-cache, must-revalidate"
 </IfModule>

あなたの問題は、セッションの設定を解除すると前のページに戻れないように、キャッシュを自動的にクリアする必要があるということです(最後のページを表示することを意味します)。

PHPでやろうとしていた場合も同じ考えです。

/* content security */
function weblock() {
    $ci =& get_instance();
    $ci->load->library('session');
    $ci->load->model('mlogin');

    // clear cache to prevent backward access
    $ci->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");
    $ci->output->set_header("Pragma: no-cache");

    // prevent unauthenticated access
    if($ci->session->userdata('user_data')==FALSE) { redirect('clogin/logout');}
    // prevent invalid authentication
    if(!$ci->mlogin->authenticate()) { redirect('clogin/logout'); }
}

このような関数を作成してみてください。コントローラーの場合は、すべてのコンストラクトで呼び出すだけです。

これがあなたを啓発することを願っています:)

于 2013-10-15T05:05:39.433 に答える