Cookies --> Browser schließen und öffnen

daryl

Mitglied
Ich habe einen Login über Cookies programmiert. Die Cookies werden über
Code:
setcookie('sit',$sitzung);
 
setcookie('IDuser',$IDuser);
gesetzt.

Anschließend wird über
Code:
function benutzer(){
 
Global $IDuser,$sit;
 
$einlesen=mysql_query("SELECT user FROM rwstats WHERE ID='$IDuser' AND kennung='$sit' AND kennung!=''");
 
if(@mysql_num_rows($einlesen)==1){
 
return mysql_result($einlesen,0,'user');
 
}
 
}
geprüft, ob der User auc hder Richtige ist. Das funktioniert ja auch ganz passabel allerdings hab ich ein Problem.

Wenn man kurz den Browser schließt und dann wieder öffnet, kommt man nicht mehr rein und kann sich dann auch nciht mehr sofort einloggen, weil die Prüfung beim Login
Code:
if(@mysql_result($einlesen,0,'kennung')==$sitAND$sit!=''AND time()-@mysql_result($einlesen,0,'aend')<600)
ein false ergibt, da ja in der DB was drin steht, der Cookie namens $sit aber nicht mehr beim user existiert.

Gibst es eine Möglichkeit, dass man den User als rechtmäßig erkennt, so lange er den Browser nicht schließt (eine Zeitspanne, in der der Cookie aktiv ist, fällt also weg), und wenn er nur kurz de nBrowser schließt sich danach wieder einlogen kann?
 
Gib mal beim Cookie setzten eine Lebensdauer an (als 3. Parameter).

zb:
setcookie('sit',$sitzung,time()+3600); // <- 1 Stunde Gültigkeit für das Cookie
 
Na genau das geht doch nciht, denn was ist, wenn einer wirklich ne Stunde lang aktiv in seinem Account ist? Dann wird er zum Re-Login gezwunen, obwohl er doch eigentlich ständig aktiv war.
 
Natürlich geht es ;o)

Du musst ganz einfach bei jedem Aufruf einer Seite das Cookie verlänger.

zB: Du bindest in jede Seite eine Header.php ein.
Dort verlängerst du gleich am Anfang die Lebensdauer immer von der aktuellen Zeit um eine Zeit (x)
==> setcookie('sit',$sitzung,time()+x);

Dann bleibt die Sitzung so lange aktiv wie x ist.
Wenn der User natürlich x-Sekunden nichts macht, läuft die Session ab - das ist aber überall so.
 
Aso, danke dann erstmal. Will nur nochmal feststellen, ob ich alles verstanden habe:

Wenn beim Login das hier gesetzt wird:
Code:
setcookie('sit',$sitzung,time()+600);
 
setcookie('IDuser',$IDuser,time()+600);
und dann auf den restlichen Seiten des Userbereiches diese Funktion aufgerufen wird
Code:
function benutzer(){
 
Global $IDuser,$sit;
 
$einlesen=mysql_query("SELECT user FROM rwstats WHERE ID='$IDuser' AND kennung='$sit' AND kennung!=''");
 
if(@mysql_num_rows($einlesen)==1){
 
setcookie('sit',$sitzung,time()+600);
 
setcookie('IDuser',$IDuser,time()+600);
 
return mysql_result($einlesen,0,'user');
 
}
 
}
und dann durch
Code:
$checkwer=benutzer();
bzw anschließende Überprüfung
Code:
if($checkwer!=$user) die();
untersucht wird, ob der User der richtige ist, funktionieren?
 
Prinzipiell ja, wenn die Funktion "Benutzer" bei jedem Seitenaufruf aufgerufen wird.
Ob der Rest des Codes stimmt kann ich natürlich nicht sagen ;o)
 
Ich führe die Zuweisung des Usernamen ja per
Code:
$checkwer=benutzer();
aus. Kann es sein, dass dadurch die Cokies nicht gesetzt werden können bzw sogar gelöscht werden?

Oder könnten irgendwie die DB-Connect-Daten in einer Funktion verloren gehen, sodass die Query dann keien Rückgabe gibt (Hinweis: Im Script mache ich den DB-Connect bevor die Funktion benutzer() aufgerufen wird)?
 
Nein, warum sollte dadurch das Cookie gelöscht werden.
Cookies werden gelöscht, indem du eine abgelaufene Zeit alt Lebensdauer eingibst.

Frage?
Warum machst du das ganze nicht mit Sessions?
 
Na weil Sessions doch nach dem Schließen des Browsers sofort weg sind. Ich möchte es aber so, dass, wenn man den Browser nur kurz schließt und ihn dann wieder öffnet, man immernoch eingeloggt ist.

Bei php.net habe ich gelesen, dass es nciht geht mit Cookies, wenn Sonderzeichen in der URL vorkommen. Ich rufe ja beispielsweise seite.php?user=daryl auf - wird das '?' und das '=' vieleicht als Sonderzeichen erkannt und der Cookie deshalb nicht verarbeitet?

Das Komische ist ja, dass es direkt nach dem Login funktioniert - auf die erste Seite, auf die man durch JS weitergeleitet wird, kommt man ohne Probleme. Klickt man dann allerding auf einen weiteren Link, gehts nicht mehr.
 
Zurück