2016-11-21 16 views
0

各ユーザーのログインセッションを作成しています。特定のユーザーのセッションログインを削除する方法

ユーザーのログインやログアウトが、その履歴がデータベースに記録されている
public function check_login() 
{ 
    $uname = $this->input->post('username'); 
    $passwd = $this->input->post('password'); 

    $this->form_validation->set_rules('username','user_name','required'); 
    $this->form_validation->set_rules('password','password','required'); 

    if($this->form_validation->run() == false) 
    { 
     $this->load->view('login'); 
    } 
    else 
    { 
     $this->load->model('model_login'); 
     $result = $this->model_login->query_login(); 

     if(!$result) 
     { $this->load->view('login'); } 
     else 
     { 
      //Log History 
      $id_user    = $this->session->userdata('id_user'); 
      $data_log['id_user'] = $this->session->userdata('id_user'); 
      $data_log['log_time'] = date("Y-m-d H:i:s"); 
      $data_log['status']  = 1; 

      $this->model_login->insert_log($data_log); 

      $data = array('log_status' => 1); 
      $this->model_login->update_log($data,$id_user); 

      echo "<script>alert('Login Sukses')</script>"; 
      redirect(base_url() . 'con_vendor/index'); 
     } 
    } 
} 

(履歴コメントをログ参照)と、ログイン状態が1に変更(彼らはオンラインだ、この平均値):これは私のセッション機能です。

しかし、ユーザーがログアウトすると、ログアウトしたユーザーだけでなく、すべてのユーザーのセッションデータが削除されたように見えます。 user_log dbには、最初のユーザーログアウトIDのみが記録されます。ログアウト時刻sが記録されても、次のユーザーIDは記録されません。

例:

ユーザーログインしてからユーザーBにログインします。すべてのログインデータは、user_logテーブルに記録されます。その後、ユーザーBはログアウトし、ユーザーAはログアウトします。ユーザBのセッションデータのみが記録され、ユーザAのセッションデータは失われる。

これは私のログアウト機能である:

public function logout() 
{ 
    $id_user    = $this->session->userdata('id_user'); 
    $data_log['id_user'] = $this->session->userdata('id_user'); 
    $data_log['log_time'] = date("Y-m-d H:i:s"); 
    $data_log['status']  = 2; 

    $this->model_login->insert_log($data_log); 

    $data = array('log_status' => 0); 
    $this->model_login->update_log($data,$id_user); 

    $arr_sess = array( 'id_user' => $this->session->userdata('id_user'), 
         'username' => $this->session->userdata('username'), 
         'level' => $this->session->userdata('level'), 
         'nip' => $this->session->userdata('nip'), 
         'bagian' => $this->session->userdata('bagian') 
        ); 

    $this->session->unset_userdata($arr_sess);  

    redirect('con_login/index'); 
} 

USER_LOGテーブル、ユーザAとBのログイン/ログアウト

No  user_id log_time status 
1  USER_B  10:25   1  //1 is login and 2 is logout 
2  USER_A  11:03   1 
3  USER_B  11:45   2 
4  (no data) 11:55   2 
+0

どのようにログインを実行していますか?同じブラウザで?危険なのは、あなたが同じセッションの下でログインすることができるので、ログアウトしたときにあなたはセッションを1つだけ抹消することです。これは、ログインごとにsession_idを表示することで証明できます。もっと良い方法は、2つのセッションを与える2つのブラウザを使用することです。もう一度session_idsで確認してください。 – TimBrownlaw

+0

はい同じPCの同じブラウザでテストしました – Vahn

+0

完全に受け入れられないテスト方法!!!別のマシンまたはatleast別のブラウザを使用してください... – Naga

答えて

0

後にデータベースにセッションを保存し、クライアントセッションをチェックする必要があります(コードheader.phpに)データベースからのセッションがまだ利用可能である場合、ユーザは有効になりますが、セッションが削除されている場合は、ユーザをログアウトページにリダイレクトします。 通知:管理パネルからセッションを削除できます。 (単純なmysqlコード)

関連する問題