Cookie wird bei Session nicht richtig gesetzt

Dick Starbuck

Erfahrenes Mitglied
Hallo,

ich bin gerade damit angefangen ein textbasiertest Community Script zu erstellen. Die einzelnen Komponenten wie Login, Logout, Passwort ändern, Memberbereich etc. funktionieren an sich auch soweit. Das Problem ist nur, dass ich das ganze in eine Index includen möchte. Dabei soll als default eine Seite geladen werden, auf der geprüft wird, ob beim Login ein Cookie gesetzt wurde, dh. eine Session erstellt wurden und der User bereits eingeloggt ist. Wenn dies nicht der Fall ist wird der Login included.

Jetzt ist das Problem, dass bein Neustart des Browsers immer wieder der Login kommt. Das mit der Cookieprüfung scheint also nicht so richtig zu klappen. Bzw. scheint das Cookie garnicht richtig gesetzt zu werden.

Hat vielleicht mal jemand ein ähnliches Problem gehabt oder weiß, wie ich die Sache mit dem Cookie setzen beim Login und Prüfen beim Seite laden am besten realisieren kann?

Ich wäre echt dankbar für eure Hilfe. Komme da alleine nicht weiter.

Gruß, Dick Starbuck
 
-

Poste doch einfach ein bisschen Code von dir, dann kann man sich mal angucken, wie und wo du Fehler machst. Ins blaue raten ist sinnlos.
 
Das Problem ist, dass ich da schon seit 2 Tagen dran rumfummel und immer wieder alles komplett umgeworfen habe, sodass ich jetzt am Ende sogut wie nichts gescheites mehr an Code stehen habe. Deswegen hätte ich gerne gewusst wie ich eine solche Situation von der Idee her am besten angehen könnte.

Ich hab hier mal 2 Auszüge, die euch vielleicht ne Idee vermitteln.

Einmal die Login.php

PHP:
<?php session_start();?>

<html>
<head>
<title>Login</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>

<form method='POST' action='index.php?op=check'>
<table class="menutitleback" width='200'>
<br>
<tr>
<td class="menutitleback" width='30'>
Username:</td>
<td class="menutitleback" width='70'><input class="INPUT" type='text' name='user1'></td>
</tr>
<tr>
<td class="menutitleback" width='30'>Password:</td>
<td class="menutitleback" width='70'><input class="INPUT" TYPE="password" name='pw1'></td>
</tr>
<tr>
<td class="menutitleback" width='30'></td>
<td class="menutitleback" width='70'><input class='BUTTON' type='submit' value='Login' name='login'></td>
</tr>
</table>
</form>

</body>
</html>

und sowas wie ne check oder verify.php...

PHP:
<?php session_start();
 session_register("user1");

if(!isset($user1)){

echo "Du bist NICHT angemeldet! <a class=linkstyle2 href=index.php?op=login>Hier anmelden!</a>" ;

}
else {

include ("members/$user1.php");

if($user == "$user1" && $pw == "$pw1") {

session_register("user1");
session_register("pw1");
session_register("email");
session_register("userdir");

echo "Herzlich Willkommen $user !";
}
else {
echo "Falsche Eingaben! <a class=linkstyle2 href=index.php?op=login>Hier anmelden!</a>";
}

}

?>

Das ganze wird jeweils in eine Tabelle in einer index.php includet, die sonst keine besonderheiten enthält. Läuft eben nur mit ner Switch Abfrage. Dabei wird diese check.php standardmäßig eingefügt. Er verweist auch korrekt auf den Login, loggt sich ein, und auch wieder aus.

Nur wenn ich den Browser schließe während ich eingeloggt bin und wieder öffne, muss ich mich auch wieder neu einloggen.

Wie kann ich das am besten verhindern?

Gruß, Dick Starbuck
 
-

Lies dir nochmal auf php.net alles über Cookies durch, denn nur mit Sessions wirst du hier nicht weit kommen. Eine Session besteht nur solange, wie auch der Browser geöffnet ist. Alles andere musst du in einem Cookie speichern.
 
Jep, ich weiß. Aber mit dem Start einer Session wird standardmäßig ebenfalls ein Cookie gesetzt, spätestens aber mit session_name(). Dieses Sessioncookies unterscheiden sich nicht im Geringsten von normalen und können wie ich es probiert habe eigentlich auch mit isset() abgefragt werden.

Mit normalem setcookie() komme ich leider überhaupt nicht weiter, da mir dann mein header der index.php in die Quere kommt. Aber wie gesagt, normalerweise sollte das auch nur mit Sessions zu lösen sein. Naja, normalerweise... ;)

Vielleicht hatte hier ja schonmal irgendjemand ein ähnliches Problem und konnte das lösen?
 
-

Also es gibt schon einen kleinen Unterschied. Ein Sessioncookie, welches gesetzt wird, wenn du die Session ID nicht per ID übergibst, wird zwar beim User gespeichert, verfällt aber genauso wie eine Session, wenn der Browser geschlossen wird.

Das Problem bei setcookie() besteht bei dir wohl darin, dass du vorher schon Ausgaben im Browser hast, Cookies müssen aber vorher gesetzt werden. Also entweder du stellst deinen Code um oder du packst in die erste Zeile deiner index.php ob_start(). Ist dann zwar nicht mehr sauber geschriebener Code, aber wat solls.
 
Kann ich dem Sessioncookie nicht eine Lebensdauer zuweisen, die über das Schließen des Brwoser hinausgeht? Oder das ganze irgendwie ganz anders angehen?

Ich habe das ganze anfangs mal ohne die index.php probiert, also im grunde nur das Login-Formular das dann auf ne member.php verwies. Nach dem Login bin ich dann auf der Userseite gelandet. Nach dem schließen und Öffnen des Browsers war ich dann immer noch eingeloggt. Das hielt solange bis ich mich ausloggte (die Session destroyte).

PHP:
<?php session_start(); ?> 

<html> 
<head> 
<title>Memberbereich</title> 
</head> 
<body> 

<?php 
include ("members/$user1.php"); 

if($user == "$user1" && $pw == "$pw1") { 

session_register("user1"); 
session_register("pw1"); 
session_register("email"); 
session_register("userdir"); 

Echo "Eingelogt als $user";

// hier waren noch Links für Logout, etc...

} 
 
else { 
echo "Fehler"; 
} 
?> 

</body> 
</html>

Also, in dem Falle wurden ja auch keine besonderen cookies etc. gesetzt und es hat trotzdem gefunzt. Es liegt wohl nur an der Abfrage in meinem anderen Script, ob der User noch online ist, dh. ob noch ein Cookie oder sonstwas gesetzt ist.
 
-

In der php.ini kann man einstellen, wielange ein Sessioncookie bestehen soll. Also wenn du deinen Browser schließt und dann gleich wieder auf die Seite gehst, dan bist du noch eingeloggt, das stimmt. Aber um längerfristig Logindaten zu speichern, bieten sich einfach keine Sessioncookies an. Also lies dir bitte alles über setcookie() oder $_COOKIE.
 
Jo, ich les schon den ganzen Tag zu dem Thema.. ;)

Naja, es würde mir im Grunde reichen, wenn das Sessioncookie für eine bestimmte Zeit bestehen bliebe. ZB. 30 Minuten. Aber eben auch wenn der Browser geschlossen ist. Aber ich werd wohl doch noch weiterlesen müssen. Vielleicht bin ich ja auf dem völlig falschen Weg...

Aber für heute geb ich erstmal auf.. Muss morgen arbeiten. :(
Ich werd mich wohl am Wochenende nochmal intensiv dransetzen. Also, erstmal vielen Dank für deine schnelle Hilfe!

Wenn dir doch noch irgendwas gutes einfällt - oder jemand Anders - lasst es mich wissen! ;)
 
Das wäre völlig sinnlos, weil die Session auf dem Server verfällt wenn der Client eine gewisse Zeit keine Aktivität verzeichnet. Man hätte dann zwar eine eigene SessionID aber der Server kännte sie nicht, auch toll, oder ? :)
 
Zurück