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.
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:
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.
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
Also wird es niemals den Cookie setzen.
Tipps:
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 error_reporting(E_ALL);
und ini_set('display_errors', 'on');
, da dies Ihr Problem erkennen lässt 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.)
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:
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.
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!
Tags und Links php