2016-09-22 2 views
0

In diesem Fall habe ich 2 Tabellen in der Datenbank "Benutzer" und "Beiträge". Erste Tabelle erweitert grundlegende Benutzerdaten (ID, Vorname, Nachname, Benutzername, E-Mail, Passwörter etc ...) Zweite ist über Beiträge (ID, Titel, Text, Autor etc ...)Wie speichern Sitzungsdaten in der Datenbank in Codeigniter?

Also wenn Benutzer wird Erstelle einen Beitrag, er muss das Titelfeld und das Textfeld ausfüllen, das Autorfeld sollte mit dem Benutzernamen ausgefüllt werden, der direkt aus der Sitzung gezogen und in db gespeichert wurde.

Antwort

1

Es gibt verschiedene Möglichkeiten, dies zu tun, aber was ich vorschlage - keine Benutzerdaten in der Sitzung speichern. Wenn sich der Benutzer zum ersten Mal anmeldet, erstellen Sie ein "Token", bei dem es sich um eine lange Zufallszeichenkette handelt, an deren Ende möglicherweise eine Datumsangabe steht. Aktualisieren Sie die Benutzertabelle mit dem Token und speichern Sie das Token in der Sitzung.

Wenn der Benutzer auf eine andere Seite geht - Sie greifen das Token aus der Sitzung - und verwenden Sie diesen, um den Benutzerdatensatz aus der Datenbank zurückzugeben. Sie haben dann alle Benutzerdetails für alles, was Sie brauchen. Dies wird Sie aus der Angewohnheit entfernen, irgendwelche Benutzerdetails in der Sitzung zu speichern. Dies ist viel besser für die Sicherheit und es macht Ihr System einfacher, auf lange Sicht zu behandeln. Andernfalls müssen Sie die Benutzerdatenbanktabelle UND die Sitzung jederzeit aktualisieren, wenn der Benutzer Änderungen vornimmt.

1

Ihre bessere und wahrscheinlich schnellere Option hier ist, Ihre SESSION-Daten in der Datenbank selbst zu speichern.

Werfen Sie einen Blick auf https://www.codeigniter.com/userguide3/libraries/sessions.html. Sie müssen eine Tabelle in Ihrer Datenbank namens ci_sessions erstellen (oder sie kann in der Konfigurationsdatei umbenannt werden) und dann könnten Sie, wenn Sie so möchten, den Benutzernamen aus der Sitzung ziehen.

Auf der Festplatte gespeicherte Sitzungen sind in Ordnung (AFAIK), wenn es eine dedizierte Box usw. ist und Sie die vollständige Kontrolle über den Code haben. Wenn Sie sich in einer gemeinsamen Box befinden, können Sie sich nicht darauf verlassen.

+0

Mit allem Respekt, dass letzter Teil überhaupt nicht wahr ist. Disk-basierte Sitzungen funktionieren gut für Shared Hosting. Der einzige "Haken" ist, dass Sie den Ordner für die Sitzungsdateien in der Datei "application/config.php" zuweisen müssen. Dieser Ordner sollte über dem öffentlichen Stammordner "html" mit den korrekten Berechtigungen liegen. Dieser Teil kann für neue Leute verwirrend sein. Andernfalls, wenn Sie einen bestimmten Anwendungsfall haben, in dem dateibasierte Sitzungen auf Shared Hosting unzuverlässig sind, wäre ich sehr interessiert zu hören, was es ist. – cartalot

+0

Ich nehme deinen Standpunkt. Offensichtlich, wenn ein Server nicht gut eingerichtet wurde, besteht das Risiko, dass diese Sitzungsdateien lesbar sind - Berechtigungen, Eindämmung usw. Eine schnelle Google-Suche findet sich unter http://eddmann.com/posts/securing-sessions-in-php/ zeigen Sie in seinem Abschnitt mit dem Titel "Session Content Encryption". – Antony

0

Wenn Sie sich einloggen, erstellen Sie ein Array von Dingen, die in die Cookie- und Session-DB gehen; Ein Beispiel

if (password_verify($pass1, $stored)) 
    { 
     $data = array(
     'name'   => $row->name, 
     'is_logged_in' => TRUE 
    ); 
     $this->session->set_userdata($data); 

Der Name ist Teil des DB-Datensatzes für den Benutzer. Aber ist nicht Teil des Login. Wenn Sie nach dem Benutzer suchen, um sie einzuloggen, ist Name eines der Dinge, die Sie in die Abfrage einbeziehen

Dann, in Ihrer Formulareingabe, einfach set_value = $ this-> Sitzung-> userdata ('Name')

Verwandte Themen