PHP Login/ Angemeldet bleiben.

Tab

unlimited
ID: 374854
L
26 Juni 2007
900
71
Hallo ihr lieben,

ich arbeite gerade an einem ANmelde/login script. Läuft bis jetzt noch alles super nur, dass ich jetzt gerne es haben würde, dass man sich einmal aneldet und das dann gespeichert ist, also dass man dann permanent angemeldet ist und nicht imemr wieder die daten eingeben muss, wie schaffe ich das?

LG
 
mit nem cookie geht das.

wie weiss ich nich.davon hab ich keine ahnung :D aber mit nem cookie gehts 100%.die experten werden dir gleich sagen wie.
 
Wie gesagt, speicherst du die Daten im Keks ab.
Was du jetzt speicherst, musst du selber entscheiden.

Am einfachsten und unsichersten (!) legst du UserID und das Passwort im Keks ab.
Besser ist es, in deiner Datenbank einen eindeutigen Hash für den User anzulegen, diesem eine gewisse Gültigkeit geben (beim Auto-Login muss dann geguckt werden, ob der Keks "abgelaufen" is) und das dann im Keks sichern.
 
Ich würde mit Sessions arbeiten. da bist du nicht zwingend auf Cookies angewiesen, müßtest dir allerdings eventuell Gedanken machen, wie du die Sessions absicherst.
 
Ich würde mit Sessions arbeiten. da bist du nicht zwingend auf Cookies angewiesen, müßtest dir allerdings eventuell Gedanken machen, wie du die Sessions absicherst.

Und wenn man nicht auf Cookies setzt, muss die Sessionid in der URL mitübergeben werden. Und wie will man das realisieren, wenn der Benutzer seinen Browser mal geschlossen hat und man nicht auf unzuverlässige Identifikationen wie die IP zurückgreifen will?

Ganz abgesehen von den Unmengen an Daten die gespeichert werden müssen, wenn man die session-lifetime hochsetzt.
 
Ja genau so wie Jonsons es erklärt hat, so soll es sein.
Habe auch schon an Cookies gedacht, doch habe ich keine wirkliche Idee wie ich das jetzt machen kann, könnt ihr mir helfen?
 
Nein, deine Ideen waren auch Fantastisch, aber wie beschrieben habe ich mit cookies keine ahnung, ich weiß jetzt ncith wie ich die id und das pw in den Cookies ablegen kann.
 
[...]aber wie beschrieben habe ich mit cookies keine ahnung, ich weiß jetzt ncith wie ich die id und das pw in den Cookies ablegen kann.
Du hast geschrieben, du habest keine Idee, wie du dein Vorhaben realisieren kannst. Dass du aber nicht weißt, wie man mit Cookies überhaupt programmiertechnisch setzt, hast du noch in keinem Wort erwähnt ;)

Du brauchst nur eine einzige Funktion, um einen Keks zu setzen: setcookie()
Auslesen kannst du über das $_COOKIE[]-Array.
Mehr gibts da eigentlich nicht zu wissen :)
 
So?

setcookie ( "$username" , "$passwort" )

Ist das so richitg? Was fehlt noch? Wo kommt es hin?
 
@ Sessions: soweit ich das weiß setzt die funktion session_start(); automatisch ein cookie !

Das heißt wenn du mit sessions arbeitest kannst du über $_SESSION[''] zum beispiel abspeichern ob der benutzer schon eingeloggt ist . Um das Cookie kümmert sich dan php von selbst
Und zum ausloggen dann session_destroy(); dann werden alle variablen in $_SESSION wieder gelöscht.
 
meines Wissen benutzt man sessions nur um wenn man eingeloggt ist das die daten dann von seite zu seite weitergegeben werden, damit man nicht einfach die url eingeben kann und sich so vor dem einloggen drücken kann.

Ich denke das es mit Cookies besser und sicherer ist, doch weiß ich ncith wie das geht, hoffe das es mir jemnad einfach erklären kann.
 
Bei einer Seesion wird die SessionID in einem Cookie(meistens) gespeichert und auf dem server können dann variablen zu dieser Session gespeichert werden auf die man nur mit der entsprechenden sessionid (im cokkie) zugriff bekommt ...
Ich denke das ist genauso sicher wie wenn du die variablen direkt im Cookie speicherst ... wenn jemand das cookie hat wars das trotzdem.

Egal bei deiner Methode mit Name und pw im cookie is das auch unsicher, du könntest einen md5 hash des passwortes zusammen mit dem namen in einer Datenbank (bzw bei nur einen Benutzer reichts auch im script) speichern und dann einfach im cookie den hash von der passworteingabe speichern ...
Dann kannst du immer überprüfen ob das passwort stimmt (bzw ob der login gültig ist) ohne es selber im cookie zu speichern zu müssen.
 
So?

setcookie ( "$username" , "$passwort" )

Ist das so richitg?
Nein.

Programmieren ist kein Ratespielchen, sondern ein Nachschlagen (<- kann man anklicken), Lesen, Denken, Verstehen, dann fragen, wenn immer noch etwas unklar ist.
Da, wo du den Keks setzen lassen willst.

Da ein Cookie über die HTTP-Headerzeilen gesendet wird, ist es egal, wo du setcookie() ausführst. Wichtig dabei ist nur, dass es vor dem Senden des HTTP-Headers (also der ersten Ausgabe) geschieht. Machst du es danach, ist der Zug schon abgefahren und PHP schlägt dir ein E_WARNING um die Ohren.
 
Bei einer Seesion wird die SessionID in einem Cookie(meistens) gespeichert und auf dem server können dann variablen zu dieser Session gespeichert werden auf die man nur mit der entsprechenden sessionid (im cokkie) zugriff bekommt ...
Ich denke das ist genauso sicher wie wenn du die variablen direkt im Cookie speicherst ... wenn jemand das cookie hat wars das trotzdem.

Es soll nicht beleidigend wirken, aber wenn du schon Behauptungen zu diesem Thema anstellst, dann solltest du auch wissen wie diese konkret funktionieren. Sonst verwirrst du die Leute nur noch mehr und schickst sie auf einen falschen Weg.
Und nun back to topic:

Richtig, es sind Cookies. Jedoch sind es Session-Cookies. Diese sind genau eine Browsersession gültig. Browser zu = Ende. Somit ungeeignet!

Weiterhin: Wenn du Variablen direkt im Cookie speicherst sind die beim User. Das heißt auf der unsicheren Seite.
Wenn du aber nur einen Hash vergibst und die Daten sicher bei dir auf dem Server liegen lässt, kannst nur du diese dann auch lesen.
Oder ist die PIN deines Kontos der Bank auch auf der Karte gespeichert? Wäre doch zu einfach die dann auszulesen? ;) (Bitte jetzt nicht sagen das die dort Verschlüsselt ist: Keine Verschlüsselung ist so sicher als wenn man die Daten garnicht erst Preisgibt!)

Egal bei deiner Methode mit Name und pw im cookie is das auch unsicher, du könntest einen md5 hash des passwortes zusammen mit dem namen in einer Datenbank (bzw bei nur einen Benutzer reichts auch im script) speichern und dann einfach im cookie den hash von der passworteingabe speichern ...
Dann kannst du immer überprüfen ob das passwort stimmt (bzw ob der login gültig ist) ohne es selber im cookie zu speichern zu müssen.

Man ist als Betreiber einer Webseite für die Sicherheit der dort lagernden Userdaten verantwortlich. Und ein Cookie mit Username|md5(pw) zu machen ist fahrlässig.
Einfaches Beispiel: Javascript Cookieklau über eine $_GET Variable die nicht html escaped wurde.
Wenn ich als User dann pw "0815" nehme und das geknackt wird, dann ist es nicht nur meine Schuld wenn der Betreiber nicht in der Lage war mit den heutigen Stand der Technik für ausreichend Sicherheit zu sorgen.

Eine simple und sichere Methode für einen Autologin wurde von theHacker genannt.

Weitergehend kann man eine Tabelle für die AutologinIDs machen (ein Beispiel wie ich es Nutze):
Code:
Tabelle "autologin"
{
    Spalte "autologinID" VARCHAR(32),
    Spalte "username" <dein Datentyp>, // Ebenfalls kann hier eine UserID stehen
    Spalte "lifetime" INT(11) 
}

Die ID kann man sich sehr einfach mit PHP generieren: md5(uniqid(rand()));.
Aber auch gucken ob diese ID schon vorhanden ist und in jenem Fall eine neue generieren.

Lifetime ist jeweils der UNIX-Timestamp wann der Cookie verfällt. Einfach zu löschen per DELETE FROM autologin WHERE lifetime < UNIX_TIMESTAMP(); vor jeder Prüfung eines Autologin-Cookies.

Ebenfalls sollte man noch darauf achten es dem User zu ermöglichen, alle AutologinIDs für seinen Account zu löschen. Bei Klamm ist das zb auch vorhanden: Beim Login "Auf allen anderen Rechnern ausloggen"
 
Ebenfalls sollte man noch darauf achten es dem User zu ermöglichen, alle AutologinIDs für seinen Account zu löschen. Bei Klamm ist das zb auch vorhanden: Beim Login "Auf allen anderen Rechnern ausloggen"
Eine derartige Funktion hab ich aber auf klamm zum ersten Mal gesehen.
Im Prinzip ist das aber mit der Tabelle mit einer Query erledigt.
Die ID kann man sich sehr einfach mit PHP generieren: md5(uniqid(rand()));.
Aber auch gucken ob diese ID schon vorhanden ist und in jenem Fall eine neue generieren.
Hier gibt es einen einfachen Trick:
autologinID hat ja sowieso einen PRIMARY(≘UNIQUE)-Key, d.h. jede ID ist einzigartig. Diesen Index kann man im Code ausnutzen.

Statt:
PHP:
/* böser Code ^^ 
(n+1) Queries */
foo:
$id = md5(uniqid(rand()));
$row = $db->queryf_result("SELECT COUNT(*) AS num FROM cookie_logins WHERE autologinID='%s'", $id);
if($row['num'] > 0)
  goto foo;

$db->queryf("INSERT INTO cookie_logins (autologinID, ....) VALUES ('%s', ...)", $id);
besser:
PHP:
/* besserer und übersichtlicherer Code
nur n Queries */
do
{
   $id = md5(uniqid(rand()));
   $db->queryf("INSERT IGNORE INTO cookie_logins (autologinID, ....) VALUES ('%s', ...)", $id);
} while(!$db->affected_rows());
 
Vielen dank, also muss ich jetzt:

Eine Tabelle autologinid erstellen, die id darf nur einmalig sein, fehlt sonst noch was?
 
Jay schrieb:
Und bei deinem Code sind ... drin haben die was zu bedeuten?
Die haben freilich was zu bedeuten. In diesem Fall symbolisieren sie zusätzliche Felder, die nicht relevant waren für das Beispiel.
Tip: Den Code oben abzukopieren bringt außer Fehlermeldungen gar nix :ugly:
Jay schrieb:
Also ich erstelle eine tabelle autologinid aber was für einstellungen muss die noch haben?
Zwar nur ne Kleinigkeit, aber die Tabelle sollte nicht "ID" drinhaben. Eigentlich logisch, oder ?

Erstell eine Tabelle (ich halte mich jetzt mal an shenziro's Post) mit dem Namen "autologin", mit 3 Feldern:
  • "autologinID", setz den Typ auf VARCHAR, Feldlänge 32; zusätzlich setzt du (phpMyAdmin ? nehm ich mal an) die OptionBox für PRIMARY-Index
  • "userID", Typ INT, Feldlänge 11 (ich vermute einfach mal, dass das so mit deiner Userverwaltung übereinstimmt).
  • "lifetime", Typ INT, Feldlänge 11
Wenn du das hast, poste doch bitte einen Screen von deinem phpMyMdmin mit der Tabellenstruktur und wir gucken, ob das so passt.