2017-12-29 9 views
0

Ich habe ein seltsames Verhalten der Anmeldung. Wenn A Login und Erfolg auf die Startseite mit Sitzung von Benutzer A (und alle seine Daten) umleiten.Benutzer Sitzungs-ID geändert, um den letzten Benutzer mit Ajax-Login in Codeigniter 3 eingeloggt

User A

Benutzer B Login und Erfolg umleiten mit Sitzung des Benutzers B

User B

Aber Sitzung des Benutzers A sofort ändern, um Sitzung des Benutzers B. zur Startseite Weil ich mit Ajax, die Der Name des Profils ändert sich, wenn ich die Seite aktualisiere. Ohne die Seite zu aktualisieren, werden wir nicht bemerken, wenn wir uns bereits als jemand anderen eingeloggt haben.

Es ist mein Login-Code

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

mein 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; 

In jedem Controller außer für die Benutzerauthentifizierung ich dieses

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

Notes verwenden: IDK irgendwie nach einer Weile (300s, denke ich), Benutzer A, der in Browser A eingeloggt war, änderte sich zu Benutzer B in Browser B und nach einer Weile Benutzer A in Browser A geändert wieder zu Benutzer A und nach diesem geänderten Benutzer B in Browser (der an den Benutzer B geändert hat) geändert B an Benutzer A.

  1. Benutzer A angemeldet, angemeldet Benutzer B in = Benutzer A zu Benutzer geändert B.
  2. Nach einer Weile aktualisiere Benutzer A (jetzt zu B-Sitzung wechseln) den Browser und wechselt zu Benutzer A (die richtigen Sitzungsdaten), aber wenn B den Browser aktualisiert (um zu sehen, ob die Sitzungsdaten ausgetauscht wurden) B wechselte auf Benutzer A usw. immer wieder abwechselnd.
+0

Sie Seite von JavaScript nach recieving 'success' in Ajax – Vladimir

+2

Verwendung zwei verschiedene Browser nicht zwei Registerkarten –

+0

wie Benutzer B in der Lage aktualisieren kann, ist einzuloggen, wenn Benutzer A bereits anmelden ?? – kranthi

Antwort

1

Sitzungen sind eine Beziehung zwischen einem Browser und einer Website. Es kann nur eine Sitzung pro Browser/Website geben.

Sie benötigen einen Test, um festzustellen, ob diese Beziehung bereits besteht, bevor Sie eine Anmeldung zulassen.

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 
} 

nicht zu Ihrem Problem zu tun hat, sondern etwas zu prüfen, ist die Verwendung von allen Großschlüsselnamen in dem $data Array.

In PHP wird standardmäßig UPPERCASE verwendet, um eine Konstante anzugeben. Sie sollten die Verwirrung in Betracht ziehen, die Sie möglicherweise für andere Entwickler entwickeln, die diesen Code in Zukunft lesen. Betrachten Sie tun dies statt:

$data = [ 
    'logged_in' => true, 
    'id' => $user['id'], 
    'username' => $user['nama_lengkap'], 
    'status' => $user['status'], 
    'access_level' => 'pengguna' 
]; 
Verwandte Themen