Benutzer kann nicht mit Cookie oder Sitzung angemeldet bleiben

8

Ich habe ein bisschen Ärger. Ich arbeite an einem kleinen cms. Wenn ich mich anmelde, ist alles in Ordnung. Aber wenn ich dort sitze, scheint die Sitzung mich dazu zu zwingen, mich nach 3 Minuten wieder einzuloggen. Also habe ich versucht, ein Remember Me-Feature zu implementieren. und hast auch kein Glück damit. Außerdem muss ich mich noch einloggen.

in meinen Funktionen habe ich den folgenden Code-Ausschnitt.

%Vor%

Dann habe ich eine andere Funktion erstellt, die, wenn die Seite Login erfordert und nicht eingeloggt ist, sie umleitet.

%Vor%

jetzt auf allen Seiten, die Logging erfordern Ich habe dies in der Kopfzeile der Seite.

%Vor%

und das sind meine Post-Daten für die Login-Seite.

%Vor%

und schließlich mein Login.

%Vor%

alles funktioniert ohne Fehler. An- und Abmeldung sind in Ordnung.

  

Das Problem ist, dass die Standardsitzung nach ihrer Anmeldung in ungefähr vier Minuten abbricht, wenn sie nicht auf Links klicken. und die remember me-Funktion wird nicht funktionieren .. Ich habe gelesen, wo eine Standardsitzung ungefähr 30 Minuten dauern sollte. aber die Sitzung erfordert Login nach 4 Minuten nicht durch die Website zu bewegen.

Jemand hat mir von Garbage Collection erzählt, aber ich muss zugeben, dass ich damit völlig verloren bin.

Ich bin noch ziemlich neu in PHP und möchte den richtigen Weg nicht auf die falsche Art lernen. Mein Projekt funktioniert großartig, ich kann einfach nicht einen Benutzer angemeldet bleiben oder die Erinnerung erhalten, um zu funktionieren.

    
Case 24.10.2016, 18:57
quelle

7 Antworten

6

Ich empfehle, eine Anwendungskonfigurationsdatei zu erstellen. Nennen Sie sie config.php und fügen Sie sie oben auf Ihren Seiten ein. So einfach wie Ihre Anwendung erscheint, gehe ich davon aus, dass Sie keinen Auto Loader verwenden. Fügen Sie das folgende Snippit hinzu:

%Vor%     
Layton Everson 27.10.2016, 05:09
quelle
4

Aktualisierung:

Bearbeiten Nummer 9 der Frage hat die Frage ziemlich dramatisch verändert und diese Antwort (und die meisten anderen Antworten) trifft nicht mehr zu.

Diese Antwort war eine Antwort auf die Nummer 7 der Frage (wenn das Kopfgeld gestartet wurde).

Dies hier zu belassen, damit die Besucher wissen, warum es so viele Antworten und Kommentare bezüglich der "Sitzungslänge" gibt, wenn die Frage, wie sie derzeit steht, nicht darauf Bezug nimmt. Löscht die Antwort beim Aufräumen.

Führen Sie die folgende PHP-Datei in Ihrem Browser aus:

%Vor%

Wenn einer der beiden Werte oben "ungefähr 4 Minuten" (240 Sekunden) ist, müssen Sie sie in Ihrer PHP-Konfiguration anpassen.

Sollte dies nicht der Fall sein, sollte die phpinfo() -Ausgabe unten alles sagen, was Sie suchen müssen: z.B.

  • Wenn Sie ein anderes Skript haben, das Dateien aus dem Sitzungspfad löscht (siehe "Sitzungsspeicherpfad" in), verlieren Sie auch die Sitzung;
  • Wenn Sie keine Cookies verwenden (ich nehme an, Sie sind es, ansonsten sehen Sie einen PHPSESS-Parameter in allen URLs), dann
  • Wenn PHP / Apache / ISS usw. "neustarten" sollte, verlieren Sie alle Sitzungen
  • (Lassen Sie sich nicht von session.cache_expire = 180 täuschen; diese 180 Minuten sind Minuten, keine Sekunden und damit nicht verwandt.)
Robbie 27.10.2016 04:44
quelle
3

Basierend auf der letzten Bearbeitung Ihrer Frage (9) und dem Codebin, wie es gerade steht (bitte beenden Sie die Bearbeitung der Frage und des Codes - erstellen Sie eine neue Frage, wenn sich diese so ändert!)

Ihr Aufruf an login_user($email, $password) übergibt die Variable $remember nicht wie erwartet in der Deklaration

%Vor%

Also wird es niemals den Cookie setzen.

Tipps:

  • Geben Sie beim Debuggen einfach echo $remember . "<br>"; oder echo "I'm Here<br>; oder echo "I'm at " . __FILE__ . "/" . __LINE__ . "<br>"; oder ähnliches in Ihren Code an verschiedenen Stellen ein, damit Sie wissen, wo das Tracking erfolgt. Du wirst sehen, dass es niemals in die "setcookie" Zeile kommt
  • Aktivieren Sie ALLE Fehlermeldungen für Debug / Entwicklung. error_reporting(E_ALL); und ini_set('display_errors', 'on'); , da dies Ihr Problem erkennen lässt
  • Wenn Sie einen Cookie verwenden, speichern Sie nicht einfach dekodierbare Dateien (wie eine Base64-Zeichenfolge), sondern speichern Sie eine Referenz auf eine "permanente Sitzung", die Sie auf dem Server speichern. Jeder Hacker würde sofort eine base64-Zeichenfolge erkennen (sehen Sie diese Gleichheitszeichen am Ende? - base64 ist das erste, was mir in den Sinn kommt). Ich könnte einen Brief ändern und mich als jemand anderen anmelden, der Ihren Code verwendet.
  • Es gibt noch ein paar Tipps zum Erstellen eines guten Session-Systems (dh wenn Sie Cookies für "remember me" verwenden, dann können Sie auch nicht die session_start() -Sessions verwenden und alles selbst machen), aber das führt dann zu Vorschlägen sollten Sie eine Bibliothek verwenden, wenn Sie sich Ihrer Logik und Sicherheit nicht 100% ig sicher sind - und das Problem base64_decode wahr ist. Hoffentlich ist Ihr verify_password nicht selbstgeschrieben, aber etwas kommerzielles? Perfekt zum Lernen, aber lassen Sie jemanden den Code vor dem Start überprüfen, wenn Sie möchten, dass er live geschaltet wird.

Viel Glück

(Und bitte, ändere die Frage nicht noch einmal! Niemand wird dir helfen wollen.)

    
Robbie 28.10.2016 03:46
quelle
2

Versuchen Sie zuerst, diese Zeile vor Ihrer Anweisung 'session_start ()' hinzuzufügen:

%Vor%

Wenn das nicht funktioniert hat, haben Sie 3 Möglichkeiten:

1) Ändere den Wert dieser Zeile in deiner php.ini auf 1800

%Vor%

2) Fügen Sie dies in Ihre .htaccess-Datei ein:

%Vor%

1800 ist in Sekunden, also ist es eine halbe Stunde.

3) Wenn Sie keinen Zugriff auf .htaccess haben, können Sie dies in Ihre Kopfzeile einfügen:

%Vor%

Debian hat einen Cron-Job, um Sitzungen automatisch nach Sicherheitsmaßnahmen ablaufen zu lassen. Wenn Sie Debian verwenden, überprüfen Sie /etc/cron.d/php *

RESSOURCEN:

Ссылка Ссылка

    
Eilat 27.10.2016 14:59
quelle
0

Sie haben nicht erwähnt, wie Sie die Funktion logged_in verwenden?
Wenn Sie einen Browser schließen, wird Ihre Sitzung zerstört, so dass Benutzer-ID, Benutzername, E-Mail-Wert Null wird.
Nachdem überprüft wurde, ob ein Cookie-Wert auf dem Cookie-Wert basiert oder nicht, müssen Sie entsprechende Werte aus der Datenbank abrufen und die Werte in der Sitzung festlegen. Sie müssen diese Art von Flow für eine dauerhafte Persistenz Login-System folgen. Ich hoffe, diese Antwort hilft Ihnen, dieses Login-System zu verstehen.

    
Anant Waykar 24.10.2016 19:27
quelle
0

Prüfe Robbie Antwort.

Falls Sie die PHP Konfiguration nicht anpassen können, können Sie auch HTTP Auth verwenden. Es läuft nicht ab. In diesem Fall wird das Passwort jedoch jedes Mal übertragen, wenn Besucher eine Webseite anfordern.

    
Nick 27.10.2016 05:08
quelle
-3

Dies ist ein falscher Weg, um damit umzugehen. Um die automatische Cookie-Anmeldung zu implementieren, sollten Sie alle erforderlichen Zugangsdaten im Cookie speichern. Aber Sie müssen sie verschlüsseln, um später Probleme zu vermeiden.

Beispiel-Cookie:

%Vor%

Der Doppelpunkt ist das Trennzeichen, so dass Sie mit explode Komponenten des Login-Tokens erhalten können. Dann können Sie diese Informationen mit den Datenbankeinträgen überprüfen.

Viel Glück!

    
Hossein Maktoobian 24.10.2016 19:35
quelle

Tags und Links