2017-03-15 4 views
0

Ich verwende Ion_auth seit 3 ​​Jahren mit Codeigniter für ein System. Plötzlich funktionieren die Sitzungen nicht so, wie sie sollten.Ion_auth - mehrere Benutzer in einer Sitzung

Wenn sich Benutzer A bei der Website anmeldet, wird die Sitzung scheinbar mit allen anderen Benutzern geteilt. Wenn Benutzer B dann zu einer der Routen navigiert, werden sie mit den Anmeldeinformationen von Benutzer A "angemeldet".

Ich habe dies mit mehreren Benutzern getestet, sobald sich ein Benutzer bei der Site anmeldet, werden alle anderen Benutzer, die die Site besuchen, automatisch mit den Anmeldeinformationen/Session dieses Benutzers angemeldet.

Wenn sich der Benutzer abmeldet und die Auth/Logout-Route aufgerufen wird, wird die Sitzung nicht zerstört und alle Benutzer bleiben für diese Sitzung angemeldet.

Die anfängliche Weiterleitung nach der Anmeldung geht nach/vehicle/index. Sobald Sie zu einer anderen Seite navigieren, die überprüft, ob der Benutzer angemeldet ist, werden Sie zur Anmeldung weitergeleitet.

Haupt-Controller-Code:

public function vehicle() 
{ 

    if (!$this->ion_auth->logged_in()) 
    { 
     redirect('auth/login'); 
    } 
    else { 
     if (!$this->ion_auth->is_admin()) { 

      /** 
      * 
      * User IS NOT admin 
      * 
      **/ 
      // Get User_id if standard user 
      $user = $this->ion_auth->user()->row(); 
      // Build Crud 

-Controller Auth.php

public function logout() 
{ 
    $this->data['title'] = "Logout"; 

    // log the user out 
    $logout = $this->ion_auth->logout(); 

    // redirect them to the login page 
    $this->session->set_flashdata('message', $this->ion_auth->messages()); 
    redirect('auth/login', 'refresh'); 
} 

Server PHP Version 5.6.30 - Bauen seit Feb 3 2017 07:51:58

Codeigniter Version 2.2 .1 - Version nicht geändert

Ion_Auth Konfig:

$config['hash_method'] = 'bcrypt'; // sha1 or bcrypt, bcrypt is 

STRONGLY recommended 
$config['default_rounds'] = 8;  // This does not apply if random_rounds is set to true 
$config['random_rounds'] = FALSE; 
$config['min_rounds']  = 5; 
$config['max_rounds']  = 9; 
$config['salt_prefix'] = version_compare(PHP_VERSION, '5.3.7', '<') ? '$2a$' : '$2y$'; 

/* 
| ------------------------------------------------------------------------- 
| Authentication options. 
| ------------------------------------------------------------------------- 
| maximum_login_attempts: This maximum is not enforced by the library, but is 
| used by $this->ion_auth->is_max_login_attempts_exceeded(). 
| The controller should check this function and act 
| appropriately. If this variable set to 0, there is no maximum. 
*/ 
$config['site_title']     = "Cars in the park";  // Site Title, example.com 
$config['admin_email']    = "[email protected]"; // Admin Email, [email protected] 
$config['default_group']    = 'members';   // Default group, use name 
$config['admin_group']    = 'admin';    // Default administrators group, use name 
$config['identity']     = 'email';    // A database column which is used to login with 
$config['min_password_length']  = 8;     // Minimum Required Length of Password 
$config['max_password_length']  = 20;     // Maximum Allowed Length of Password 
$config['email_activation']   = TRUE;    // Email Activation for registration 
$config['manual_activation']   = TRUE;    // Manual Activation for registration 
$config['remember_users']    = FALSE;    // Allow users to be remembered and enable auto-login 
$config['user_expire']    = 30;    // How long to remember the user (seconds). Set to zero for no expiration 
$config['user_extend_on_login']  = FALSE;    // Extend the users cookies every time they auto-login 
$config['track_login_attempts']  = TRUE;    // Track the number of failed login attempts for each user or ip. 
$config['track_login_ip_address']  = TRUE;    // Track login attempts by IP Address, if FALSE will track based on identity. (Default: TRUE) 
$config['maximum_login_attempts']  = 3;     // The maximum number of failed login attempts. 
$config['lockout_time']    = 600;     // The number of seconds to lockout an account due to exceeded attempts 
$config['forgot_password_expiration'] = 0;     // The number of milliseconds after which a forgot password request will expire. If set to 0, forgot password requests will not expire. 

Session config:

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 30; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = FALSE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = FALSE; 
$config['sess_time_to_update'] = 30; 

Session-Variablen (für angemeldete Benutzer. Alle anderen Benutzer haben die gleichen Informationen in der Sitzung):

stdClass Object ([id] => 1148 [ip_address] => [username] => testing [password] => $2y$08$Q4fjUfsuOKM/Q8cnQt6j0uSXP.3mCqMnzDY1nBA9RDlwm [salt] => sadsda [email] => [email protected] [activation_code] => [forgotten_password_code] => [forgotten_password_time] => [remember_code] => [created_on] => 1426181328 [last_login] => 1490008619 [active] => 1 [first_name] => Name [last_name] => Testing [company] => [phone] => [user_id] => 1148) 
+0

haben Sie ein CI-Upgrade durchgeführt, gab es ein Upgrade von PHP auf Ihrem Server? Bitte überprüfen Sie alle möglichen Konfigurationsänderungen und bearbeiten Sie diese auf Ihre Frage. Danke – Vickel

+0

Wenn es funktioniert hat, und Sie den Code nicht bearbeitet haben, dann ist das, was Sie beschreiben, unmöglich ... obwohl zwei Benutzer, die die gleiche Sitzung teilen, schon ziemlich unwahrscheinlich sind mit einer richtig installierten Ion Auth. Überprüfen Sie die Dateiänderungsdaten, um sicherzustellen, dass niemand anderes etwas manipuliert hat. Außerdem bin ich sehr misstrauisch darüber, wie Sie das testen ... Verwenden Sie verschiedene Maschinen und/oder Browser, um diese Beobachtungen zu überprüfen? – Sparky

+0

Ich teste das auf verschiedenen Geräten, verschiedenen Verbindungen und das Ergebnis bleibt gleich. Eine Sitzung wird erstellt, und alle Benutzer bleiben in dieser Sitzung bis zum Ablauf der Sitzung. Abmelden zerstört die Sitzung nicht, aber logged_in() gibt false zurück, so dass alle Seiten nach der ersten Weiterleitung zurück zur Anmeldung weitergeleitet werden. –

Antwort

0

Ändern Sie die folgenden Einstellungen in config:

$config['sess_driver'] = 'database'; 
$config['sess_save_path'] = 'ci_sessions'; 

Tabelle erstellen ci_sessions:

Für MySQL:

DROP TABLE IF EXISTS `ci_sessions`; 

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(128) NOT NULL, 
    `ip_address` varchar(45) NOT NULL, 
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL, 
    `data` blob NOT NULL, 
    KEY `ci_sessions_timestamp` (`timestamp`) 
); 

Für PostgreSQL:

CREATE TABLE "ci_sessions" (
    "id" varchar(128) NOT NULL, 
    "ip_address" varchar(45) NOT NULL, 
    "timestamp" bigint DEFAULT 0 NOT NULL, 
    "data" text DEFAULT '' NOT NULL 
); 

CREATE INDEX "ci_sessions_timestamp" ON "ci_sessions" ("timestamp"); 

Um Datenbank als Session-Treiber

Die ‚Datenbank‘ Treiber verwendet eine relationale Datenbank wie MySQL oder PostgreSQL zu speichern Sitzungen zu verwenden. Dies ist eine beliebte Wahl unter vielen Benutzern, da es dem Entwickler einfachen Zugriff auf die Sitzungsdaten innerhalb einer Anwendung ermöglicht - es ist nur eine weitere Tabelle in Ihrer Datenbank.

Allerdings gibt es einige Bedingungen, die erfüllt sein müssen:

  • Nur Ihre Standard-Datenbankverbindung (oder die, die Sie als $this->db von Ihrem Controller zugreifen) verwendet werden können.
  • Sie müssen den Query Builder aktiviert haben.
  • Sie können nicht verwenden Sie eine dauerhafte Verbindung.
  • Sie können NICHT verwenden Sie eine Verbindung mit der Cache_on-Einstellung aktiviert.

Quelle: Codeigniter Session

0

Dies war ein Server-Problem (Shared Hosting). Ich habe die komplette App auf einen neuen Host verschoben (vps hosting) und alles hat so funktioniert wie vorher.

Die Umstellung auf DB-Sessions, wie Rafiq und die anderen Kommentatoren vorgeschlagen haben, half beim Testen.

Verwandte Themen