2017-12-29 28 views
0

loginの動作が奇妙です。ログインと成功が、ユーザーAのセッションを持つホームページ(およびそのすべてのデータ)にリダイレクトされます。ユーザセッションIDが、codeigniter 3のajaxログインを使用して最後にログインしたユーザに変更されました。

User A

ユーザーBのログインと成功は、私はAJAXを使用しているので、すぐにユーザBのセッションに変更するには、ユーザーB

User B

しかし、ユーザーAのセッションのセッションでホームページにリダイレクトページを更新するときにプロファイルの名前が変更されます。ページをリフレッシュせずに、すでに他のユーザーとしてログインしている場合は通知しません。しばらく後に何とかIDK:

は、それは私がこの

public function __construct() 
{ 
    parent::__construct(); 
    if($this->session->ACCESS_LEVEL != 'pengguna') 
    { 
     redirect(base_url()); 
    } 
} 

ノートが使用認証ユーザー以外のすべてのコントローラでは、私のログインコード

public function login_user() 
{ 
    $condition = [ 
     "email" => $this->input->post('email'), 
     "password" => md5($this->input->post('password')) 
    ]; 

    $user = $this->builtbyprime->get('baper_users', $condition, 1); 

    if(count($user) > 0) { 
     $data = [ 
      'LOGGED_IN' => true, 
      'ID'   => $user['id'], 
      'USERNAME'  => $user['nama_lengkap'], 
      'STATUS'  => $user['status'], 
      'ACCESS_LEVEL' => 'pengguna' 
     ]; 

     $this->session->set_userdata($data); 
     redirect(base_url() . 'pengguna/homepage'); 

    } else { 
     $this->session->set_flashdata('login', 'gagal'); 
     redirect(base_url()); 
    } 
} 

私のconfig.php

$config['sess_driver'] = 'database'; 
$config['sess_cookie_name'] = 'baperplus'; 
$config['sess_expiration'] = 7200; 
$config['sess_save_path'] = 'ci_sessions'; 
$config['sess_match_ip'] = FALSE; 
$config['sess_time_to_update'] = 300; 
$config['sess_regenerate_destroy'] = TRUE; 


$config['cookie_prefix'] = ''; 
$config['cookie_domain'] = ''; 
$config['cookie_path']  = '/'; 
$config['cookie_secure'] = FALSE; 
$config['cookie_httponly'] = FALSE; 

です(私は思う)300、ブラウザAでログインしているユーザAはブラウザBでユーザBに変更され、しばらくしてからユーザBに変更されたブラウザAはユーザAに再び変更され、ブラウザBの変更されたユーザBはユーザAに変更された。

  1. ユーザAログイン、ユーザBログイン=ユーザAがユーザに変更されたB.
  2. ユーザA(現在はBセッションに変更)ブラウザ をリフレッシュしてユーザA(正しいセッションデータ)に変更しますが、Bセッションのデータが交換されたかどうかを確認するためにブラウザをリフレッシュします。 Bが ユーザーAなどに何度も交互に変更されました。
+0

あなたはアヤックス – Vladimir

+2

使用中の 'SUCCESS'二つの異なるブラウザではない二つのタブユーザBは、ユーザAがすでにログインしている場合は、ログインすることができますどのように –

+0

が供給した後はJavaScriptでページを更新できますか? – kranthi

答えて

1

セッションは、ブラウザとウェブサイトの関係です。ブラウザ/ウェブサイトごとに1つのセッションしかできません。

ログインを許可する前に、その関係が既に存在するかどうかを確認するテストが必要です。あなたの問題ではなく、考慮すべき何かに関連していない

public function login_user() 
{ 
    if($this->session->LOGGED_IN) 
    { 
     //somebody is already logged in on this browser 
     redirect(base_url('pengguna/homepage')); 
    } 

    //the remainder of the code as you already have it 
} 

$data、アレイ内のすべての大文字のキーの名前を使用することです。

PHPでの慣習では、すべての大文字は定数を示すために使用されます。今後このコードを読んでいる他の開発者にとって混乱が生じるかもしれないと考えてください。代わりにこれをやって考えてみましょう:

$data = [ 
    'logged_in' => true, 
    'id' => $user['id'], 
    'username' => $user['nama_lengkap'], 
    'status' => $user['status'], 
    'access_level' => 'pengguna' 
]; 
関連する問題