PHP::session(); Kein Dauerhafter Login?

Hallo,

habe vor kurzem ein kleines Registrations- und LogIn-(und LogOut-) Script mit PHP und MySQL geschrieben. Alle Seiten ‘besitzen’ PHP::session().

Wenn ich jetzt lange warte oder den Browser neu starte, bin ich wieder ausgeloggt. Habe deshalb versucht, die php.ini zu bearbeiten, indem ich daraus

<?php ini_set('session.cookie_lifetime', 3600*24*365); ini_set('session.gc_maxlifetime', 3600*24*365); session_start(); [...] gemacht habe. Habe natürlich drauf geachtet, dass das jeweils am Anfang der PHP-Datei steht.

Diese Änderung scheint jedoch nichts zu bringen, da ich auch weiterhin nach Browser-Neustart mich neu einloggen muss. Habe ich etwas falsch gemacht? Falls es benötigt wird, kann ich weitere PHP- u. MySQL-Schnippsel hier publizieren.

Vielen Dank schonmal im Vorraus!

Gruß, DMan

Ne Session is ja auch nur gültig bis zum Browser restart :wink: Das war schon immer ihr Zweck :stuck_out_tongue:
Für alles andere musst du Cookies benutzten… dir daher selber Daten schreiben die einen User identifizieren. [size=85](einige nutzten z.B. nen random “key” der dann auch nur mit einer IP gültig ist, andere wiederum speichern das Passwort in irgendeiner Form im Cookie)[/size]

Ach so, okay. Dachte das ist so ähnlich wie bei yooco.de, wo man ewig eingeloggt ist.

Aber ich dachte, dass mit PHP::session ein Cookie erzeugt wird. Außerdem hab ich doch die Lebenszeit eines Cookies auf 1 Jahr geschrieben. :o

Aber okay. Was könnte ich als nächstes machen, damit man auch nach dem Browser-Neustart eingeloggt ist? Und danke für den Hinweis. :slight_smile:

Ansich ja… das Session zeug von PHP erstellt auch einen Cookie… einen Session Cookie.
Es ist auch theoretisch möglich ne PHP Session zu nutzen aber diese so derart zu vergewaltigen das der Browser auch über einen neustart hinaus die Session behält^^

Allerdings meide ich generell PHP Sessions… sind halt nur für kurzlebiges gedacht und würde man diese länger bewahren wollen, würde es ne menge Datenmüll auf dem Server lagern. Hingegen eine Umsetzung mit Cookies, keine bis sehr wenig Daten auf dem Server lagert.

Nur der Vollständigkeit halber: Ich weiß nicht ob du PHP befehlen kannst wie es den Cookie erstellen soll/darf. Was du aber zumindest machen kannst, ist PHP manuell mit der SessionID zu füttern. Kannst diese also von PHP erstellen lassen, selber nen Cookie erstellen und dann später auch wieder manuell füttern.
Infos hast du jetzt jedenfalls genug und die PHP.net Dokumentation ist auch relativ gut.

Also einen Cookie erzeugen (lassen), in der Datenbank abspeichern und wenn dieser vorhanden ist, dann automatisch einloggen? Wie könnte man den abfragen, ob der User einen Cookie hat?

Schau mal hier: de2.php.net/manual/de/features.cookies.php

Hab mich da reingelesen, komm aber immer noch nicht zurecht. Ich kann klar einen Cookie setzen und auch in die Datenbank schreiben, aber wie soll ich abfragen, ob dieser Cookie auf dem PC gespeichert ist?

Bleibt dieser Cookie auch nach dem Neustart des Browsers erhalten?
Dann könnte man so nach dem (erfolgreichen) LogIn einen Cookie erzeugen, diesen in die Datenbank schreiben und beim Betreten des geschützen Bereichs abfragen, ob dieser Cookie existiert.

Geht das so klar?

Und noch eine Frage zum Syntax. Mag nur einen Namen, einen Wert und den Pfad angeben, zwischen Wert und Pfad liegt die Expire-Variable. Kann ich die leer lassen (Name, Wert, , Pfad, ) oder alternativ mit 0 besetzen?

Ich weiß, voll noobig aber ich will auf Nummer Sicher gehen.

Wie man gespeicherte Cookies ausliest findest du hier:
de2.php.net/manual/de/reserved.v … ookies.php

Wenn du für expire den Wert 0 angibst wird das Cookie beim beenden des Browsers gelöscht, ansonsten gilt es für die angegebene Anzahl an Sekunden und bleibt beim Beenden des Browsers gespeichert (sofern der Nutzer nicht eingestellt, hat, dass generell alle Cookies gelöscht werden, wenn der Browser beendet wird).
Siehe auch hier die Erklärung zum Wert expire:
de2.php.net/manual/de/function.setcookie.php

Werte bei optionalen Parametern kannst du überspringen, indem du den Standardwert angibst (auf php.net ist dieser nach einem = angegeben, bei expire also 0). Gibt es keinen Standardwert kannst du null mitgeben.

Dauerlogins sind nicht gut, zudem sollte man das von einer Datenbank abhängig machen wie lang wer online ist, wenn er die eingestellte onlinezeit nicht übertrifft könnte man ihn einfach ein aktuelle session geben…