Probleme mit Sessions
Knud Schröder
- php
0 Tobias Kloth0 Tom0 Knud Schröder0 Tom0 Knud Schröder0 Tom
Hallo,
man mag es kaum glauben, aber ich beschäftige mich erst jetzt mit der Session-Geschichte. Allerdings komme ich hier nicht weiter und brauche (mal wieder) Eure Hilfe.
Zunächsteinmal verwende ich die PHP Version 4.3.4. Ist ja nicht ganz unbedeutend, gelle?
Hier nun mal die beiden Dateien:
Datei start.php:
<?
require('/grab_globals.lib.php');
@session_start();
if (isset($_POST['submit'])) {
$_SESSION['Benutzername'] = $username;
$_SESSION['Passwort'] = $passwort;
$_SESSION['meineTolleQuery'] = "Select...";
header("Location: http://" . $_SERVER['SERVER_NAME'] . "/tools/session/seite.php");
} else {
$_SESSION['username'] = " ";
$_SESSION['passwort'] = " ";
}
?>
<html>
<head>
<title>Test mit Session-ID arbeiten</title>
</head>
<body>
<br>
<br>
<form name="start" method=POST action="start.php">
<table border=0>
<tr><td>Loginname: </td><td><input type="text" name="username" size=20></td></tr>
<tr><td>Passwort: </td><td><input type="text" name="passwort" size=20></td></tr>
<tr><td colspan=2><input type="submit" name=submit value="Einloggen"></td></tr>
</table>
</form>
<br>
<br>
<a href="seite.php">Auf die nächste Seite gehen</a>
</body>
</html>
Und hier die zweite Datei seite.php:
<?
require('/grab_globals.lib.php');
@session_start();
$u = $_SESSION['Benutzername'];
$p = $_SESSION['Passwort'];
?>
<html>
<head>
<title>Test mit Session-ID arbeiten</title>
<?
include ("/config.php");
echo $jkstyles;
?>
</head>
<body>
<?
echo "Benutzername: $u<br>";
echo "Passwort: $p<br>";
echo "Test: ".$_SESSION['meineTolleQuery'];
echo "<br>";
?>
<br>
<br>
<br>
<a href="start.php">Neuanmelden</a>
</body>
</html>
Das Problem ist, dass auf der zweiten Seite, keine Werte angezeigt werden.
Ich befürchte, ich hab da was grundsätzlich nicht verstanden, aber vielleicht mag mich jemand aufklären?
Danke!
Gruß,
Knud
Hallo Knud,
@session_start();
warum unterdrückst du eine mögliche Fehlermeldung?
if (isset($_POST['submit'])) {
$_SESSION['Benutzername'] = $username;
eine Zeile drüber arbeitest du noch mit $_POST - warum in der Zeile nicht mehr?
$_SESSION['Passwort'] = $passwort;
hier genauso.
$_SESSION['username'] = " ";
$_SESSION['passwort'] = " ";
du solltest dich mal entscheiden, wie die Schlüssel des $_SESSION-Arrays heißen sollen oben verwendest du 'Benutzername' und hier auf einmal 'username'...
Das Problem ist, dass auf der zweiten Seite, keine Werte angezeigt werden.
auch das 'Select...' aus $_SESSION['meineTolleQuery'] nicht?
Grüße aus Nürnberg
Tobias
Hallo Knud,
@session_start();
warum unterdrückst du eine mögliche Fehlermeldung?
Habs wegenommen ;-) Kommt aber keine Fehlermeldung. In beiden Dateien keine.
if (isset($_POST['submit'])) {
$_SESSION['Benutzername'] = $username;
eine Zeile drüber arbeitest du noch mit $_POST - warum in der Zeile nicht mehr?
Eigentlich arbeite ich gar nicht mit $_POST und sowas. Ist noch Überbleibsel vom testen (hab ich wieder auf $submit geändert.)
Dass ich die "normalen" Variablen benutzen kann, erreiche ich durch das kleine Script grab_globals.
$_SESSION['Passwort'] = $passwort;
hier genauso.$_SESSION['username'] = " ";
$_SESSION['passwort'] = " ";
du solltest dich mal entscheiden, wie die Schlüssel des $_SESSION-Arrays heißen sollen oben verwendest du 'Benutzername' und hier auf einmal 'username'...
Ist auch noch ein Übrigbleibsel vom testen, hatte ja keine Auswirkung auf das Script, ist geändert, hat aber nichts verändert ;-)
Das Problem ist, dass auf der zweiten Seite, keine Werte angezeigt werden.
auch das 'Select...' aus $_SESSION['meineTolleQuery'] nicht?
Nö, leider wird auch das nicht angezeigt. :-(
Gruß und Dank,
Knud
Hello,
sieht doch schon ganz gut aus. Aber nur messen heißt wissen. Deshalb mal gaaanz langsam.
Was müßßte man sich denn auf jeder Seite ausgeben lassen, wenn man ganz unten anfangen will? Genau: die Session-ID.
Also:
Nach dem session_start() ein
echo "Session-Nr: ".session_id()."<br />";
einfügen und vergleichen, ob es denn die slebe Nummer ist.
Dann gehts weiter.
Grüße
Tom
Hallo
Nach dem session_start() ein
echo "Session-Nr: ".session_id()."<br />";
einfügen und vergleichen, ob es denn die slebe Nummer ist.
So wie es aussieht, wird tatsächlich jedesmal eine neue Session_ID erzeugt. Tolle Idee!
Wenn Du mir nun noch helfen könntest, warum :)
Gruß,
Knud
Hello,
Nach dem session_start() ein
echo "Session-Nr: ".session_id()."<br />";
einfügen und vergleichen, ob es denn die slebe Nummer ist.So wie es aussieht, wird tatsächlich jedesmal eine neue Session_ID erzeugt. Tolle Idee!
Wenn Du mir nun noch helfen könntest, warum :)
Klar!
Noch eine Stufe weiter runter schalten:
Browser auf "redselig" einstellen
-> Cookies nur nach Rückfrage annehmen
reingucken, was drinstet
phpinfo() aufrufen
-> schauen, wie session.use_trans_sid eingestellt ist
-> schauen, wie session.use_cookies eingestellt ist
-> schauen, wie session.cookie_doamin eingestellt ist
-> schauen, wie session.name eingestellt ist
Na, und dan geht's weiter...
Grüße
Tom
Browser auf "redselig" einstellen
-> Cookies nur nach Rückfrage annehmen
reingucken, was drinstet
Hab ich eingestellt und festgestellt, dass offenbar keine cookies erzeugt werden. hmpf!
-> schauen, wie session.use_trans_sid eingestellt ist
--> steht auf Off
-> schauen, wie session.use_cookies eingestellt ist
--> steht auf On
-> schauen, wie session.cookie_doamin eingestellt ist
--> steht meine Domain drinne
-> schauen, wie session.name eingestellt ist
--> Standard-Name = PHPSESSID
Ist das soweit in Ordung?
Gruß,
Knud
Hello,
Browser auf "redselig" einstellen
-> Cookies nur nach Rückfrage annehmen
reingucken, was drinstetHab ich eingestellt und festgestellt, dass offenbar keine cookies erzeugt werden. hmpf!
Das musst Du ändern, sonst klappt das nicht mit den Sessions.
-> schauen, wie session.use_trans_sid eingestellt ist
--> steht auf Off
Sollte man so stehen lassen und lieber vorher testen, ob eine Session mit Cookies vom Browser angenommen wird. Das kann man am Besten machen, indem man einen Cookie zusammen mit einem Redirket-Header (temporarely moved) an den Client schickt. Aber aufpassen, wenn man das an das seleb Script zurückschickt, dann gibt's eine Endlosschleife. Da muss man eine Sicherung einbauen (Parameter mit ? anhängen, mitzählen, besser noch andere Seite der Domain benutzen und Ping-Pong spielen)
-> schauen, wie session.use_cookies eingestellt ist
--> steht auf On
Das ist die Voraussetzung für Sessions mit Cookies ;-)
-> schauen, wie session.cookie_domain eingestellt ist
--> steht meine Domain drinnea
Kann auch nicht schaden
-> schauen, wie session.name eingestellt ist
--> Standard-Name = PHPSESSID
Ist Standard. Sollte man vielleicht innerhalb der Seiten mit session_name() jeweils vor dem Aufruf von session_start() ändern.
Ist das soweit in Ordung?
Ja, das ist alles in Ordnung. Nur der Browser eben nicht.
Da es ja sein kann, dass andere Browser auch nicht per default die Cookies annehmen, sollte man in diesem Fall auf Auth401 umschalten, und seine Sessions selber schreiben. -> register_shutdown_function().
Grüße
Tom