2017-01-26 1 views
0

Ich bin also auf ein Problem gestoßen.CodeIgniter App - Wie aktualisiert man die Sitzungsdaten aller Geräte, wenn Benutzerdaten von einem anderen Gerät geändert wurden

1. I log into website using my user information on my desktop. 
2. My sessions are set within the desktop. 
3. I log into website using a smartphone. (Now there are 2 devices logged in.) 
4. My sessions are set within smartphone. 
5. I change my user information in user settings page using my desktop. 
6. Database is updated. 
7. Sessions are updated on desktop, but not on phone. 

Wie kann ich es beheben? Soll ich den Datenbanktreiber von CodeIgniter für Sitzungen verwenden? Wäre das überhaupt wichtig?

Danke.

+0

sieht aus wie Sie Ihre DB-Daten in der Sitzung zu speichern - nur einen lastchange Zeitstempel hinzufügen und die Sitzungsdaten mit dem db vergleichen, Die andere Möglichkeit wäre - diese Daten aus der Sitzung zu treten und es abholen auf jede Anfrage – sintakonte

+0

@sintakonte, also müsste ich im Grunde eine Verbindung zur Datenbank herstellen und Zeitstempel bei jedem Laden der Seite vergleichen? Wäre das nicht ineffizient? Oder bin ich paranoid – radiantMemory

+0

vielleicht bist du vielleicht nicht, aber ich sehe deinen Punkt;) Es gibt andere Möglichkeiten - wie die Installation eines Dienstes wie Memcache oder Redis - in diesem Fall können Sie den integrierten Caching-Treiber von CI verwenden (https: //www.codeigniter.com/userguide3/libraries/caching.html#redis-caching); Speichern Sie einfach Ihre Werte in db und Punkt 7 wäre - update/in Ihr Cache-System einfügen (danach holen Sie die Daten bei jeder Anfrage aus Ihrem Cache-System) – sintakonte

Antwort

0

Ich habe gerade ein session_refresh Model erstellt und es automatisch geladen. Hoffentlich kann das skalieren und wird den Server nicht viel beeinflussen.

protected $CI; 

public function __construct() 
{ 
    $userdata = $this->session->userdata; 

    if (isset($userdata['uid'])) 
    { 
     /* 
     * CONNECT TO DATABASE AND, 
     * CHECK IF MODIFIED TIMESTAMPS CHANGED 
     */ 
     $query = $this->db->get_where('users', array('uid' => $userdata['uid'])); 
     $row = $query->row(); 

     /* 
     * IF THE "MODIFIED" TIMESTAMP DIFFERS, 
     * UPDATE THE SESSION WITH THE NEW DATA. 
     */ 
     if ($userdata['modified'] !== $row->modified) 
     { 
      $this->CI =& get_instance(); 
      $this->CI->load->model('user_model'); 

      $this->CI->user_model->set_user_session($row); 
     } 
    } 
} 
Verwandte Themen