2013-10-15 3 views
0

Я разрабатываю приложение, используя codeigniter. В этом приложении, когда пользователь нажимает кнопку выхода из системы, я отключаю сеанс, но когда я нажимаю кнопку «Назад» в своем браузере, я получаю последнюю удаленную страницу.Сессия Codeigniter не может быть закрыта

Как решить эту проблему?

+0

вам нужно проверить сессию конструктора каждый контроллер –

+0

Можете ли вы сказать мне, как? – Serma

+0

Я думаю, что это будет долгий процесс. просто проверить решение я «ве alerady приводится ниже: D – Vainglory07

ответ

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'); } 
} 

попытайтесь создать такую ​​функцию. просто назовите его на каждой конструкции, если ваш контроллер.

надеюсь, что это вразумляет :)

+0

Извините. Это тоже не сработало для меня – Serma

+0

i обновил мой ответ: D – Vainglory07

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'); 
} 
} 

Это решает проблему кнопки «назад», а также помогает против CS Радиочастотные атаки

+0

Мне это нравится ..: D – Vainglory07

+0

извините, этот ответ не решил мою проблему – Serma

+0

@Serma? Как так?Я уверен, что вы даже не внедрили его, вы не можете вернуться с запроса POST, не пересылая данные post –

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()); 
     } 

Попробуйте это .Это будет решают кнопку «Назад» проблему

Смежные вопросы