Session-Inhalt verschwindet
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
ausgabe
browser
code
datei
datum
fehler
fehlermeldung
hilfe
http
login
output
post
problem
session
start
stehen
test
ticket
url
-
Hallo,
ich stehe mal wieder vor einem Problem, dessen Lösung bestimmt (mal wieder) ganz einfach ist.
Jedoch blicke ich im moment garnicht mehr durch deswegen hier das Problem:
Ich versuche ein Loginscript mit Sessions zu erstellen.
Habe schon viel darüber gelesen, aber es will einfach nicht klappen. Folgender Code:
if(isset($_POST["submit"])){ if(isset($_POST["name"]) && isset($_POST["password"])){ if(($_POST["name"] == "test") && ($_POST["password"] == "123")){ $user= $_POST["name"]; session_name("usr_login"); $_SESSION["Username"] = $user; $_SESSION["login"] = true; } else{ $_SESSION["login"] = false; } } }
Weiter unten gebe ich den ganzen Spaß aus:
echo ("Hallo ".$user."!<br />\n"); echo var_dump($_SESSION). "<br />\n"; echo "<a href=login.php?" . session_name() . "=" . session_id() . ">SEITE NEU LADEN</a><br />\n"; echo "<a href=login.php?>SEITE NEU LADEN- OHNE SID</a><br />\n"; echo "<a href=index.php?" . session_name() . "=" . session_id() . ">STARTSEITE</a><br />\n"; echo "<a href=index.php?>STARTSEITE- OHNE SID</a>";
Am Anfang der Datei also noch vor dem <doctype> habe ich session_start() stehen.
Wenn man sich jetzt einloggt wird der Username Ausgegeben. Es funktioniert scheinbar alles. Jedoch lädt man die Seite neu, verändert sich die session ID und der session_name springt wieder auf LCWSID. Habe auch schon hier gelesen dass das der Standart session_name ist auf lima-city. Nur wie bekomme ich meine Session dauerhaft registriert, also bis ich session_destroy o.Ä. aufrufe?
Hier könnt Ihr euch das prob. anschauen:
http://xxxparenjxxx.lima-city.de/login.php
Vielen Dank für die Hilfe schonmal im Voraus.
mfg, Michl -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mit session_start() startest du bei einem erneuten Laden der Seite eine neue Session mit neuer SID.
Baue dein session_start() hier ein:
if(isset($_POST["name"]) && isset($_POST["password"])){ .....
Beitrag zuletzt geändert: 7.3.2013 7:48:09 von timebandit -
timebandit schrieb:
Mit session_start() startest du bei einem erneuten Laden der Seite eine neue Session mit neuer SID.
Diese Aussage ist so unvollständig:
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-Kennung basiert, die mit einer GET- oder POST-Anfrage oder mit einem Cookie übermittelt wurde.
Nachzulesen hier
Beitrag zuletzt geändert: 7.3.2013 8:22:39 von burgi -
Ich sehe in meinem Beitrag keinen echten Fehler, denn:
Um eine benannte Session zu verwenden, rufen Sie session_name() auf, bevor Sie session_start() aufrufen.
xxxparenjxxx verwendet am Scriptanfang nur session_start().
Mein Vorschlag ist nur gewesen, dass eine neue Session nur gestartet wird, wenn Daten übermittelt wurden.
Mfg,
timebandit
-
Warum eigentlich session_id() und / oder session_name() verändern und / oder ausgeben ???
versuch es mals so
<?php // ------------------------------------------------- error_reporting(E_ALL); ini_set("display_errors", 1); // ------------------------------------- session_name("usr_login"); session_start(); // ------------------------------------- $testdata['user'] = 'test'; $testdata['pass'] = '123'; $secret_salt = 'u5Rt2WnB4k'; $check_key = md5($testdata['user'].$secret_salt.$testdata['pass']); // ------------------------------------------------- if (!empty($_POST['name']) && !empty($_POST['password'])) { $user_name = trim($_POST['name']); $user_pass = trim($_POST['password']); $login_key = md5($user_name.$secret_salt.$user_pass); if ($login_key == $check_key) { // ---- in Sessiion schreiben !!! $_SESSION['loginkey'] = $login_key; $_SESSION['username'] = $user_name; } else { session_unset(); session_destroy(); } } // ------------------------------------------------- if (!empty($_REQUEST['seite'])) { $run_seite = trim($_REQUEST['seite']); } else { $run_seite = 'start'; } // ------------------------------------------------- if ($run_seite == 'logout') { // ---- Sessiion loeschen !!! session_unset(); session_destroy(); } // ------------------------------------------------- ?> <!doctype html> <html> <head> <meta name="TEST" content="test" /> <link rel="stylesheet" type="text/css" href="css/style.css" /> </head> <body> <p>--- <a href="?seite=start">HOME</a> --- </p> <?php // ------------------------------------------------- if (isset($_SESSION['loginkey']) && $_SESSION['loginkey'] == $check_key) { // ------------------------------------------------- ?> <p> </p> <p>Hallo USER: <strong><?php echo $_SESSION['username']; ?></strong> !!!</p> <p> </p> <p>Du bist jetzt eingeloggt .... </p> <p> </p> <p>--- <a href="?seite=start">HOME</a> --- <a href="?seite=logout" style="color:red;">LOGOUT</a> ---</p> <p> </p> <?php // ------------------------------------------------- print "<br />\n"; print "<br />... DEBUG ... nach dem LOGIN ...\n"; print "<br />\n"; print "<br />Session ID: ". session_id() ."\n"; print "<br />Session Name: ". session_name() ."\n"; print "<br />\n"; print "<br />_SESSION Daten: \n"; print "<br />\n"; print "<pre style=\"text-align:left; background:#DEDEDE;\">\n"; print_r($_SESSION); print "</pre>\n"; print "<br />\n"; print "<br />\n"; } else { // ------------------------------------------------- ?> <p> </p> <p>Logge dich ein!</p> <p> </p> <form action="login.php" method="post" /> <p>Username: <input type="text" name="name" /></p> <p>Passwort: <input type="password" name="password" /></p> <p>OK: <input type="hidden" name="seite" value="start" /> <input type="submit" name="submit" value="Einloggen" /></p> </form> <p> </p> <?php // ------------------------------------------------- print "<br />\n"; print "<br />... DEBUG ... vor dem LOGIN ...\n"; print "<br />\n"; print "<br />Session ID: ". session_id() ."\n"; print "<br />Session Name: ". session_name() ."\n"; print "<br />\n"; print "<br />_SESSION Daten: \n"; print "<br />\n"; print "<pre style=\"text-align:left; background:#DEDEDE;\">\n"; print_r($_SESSION); print "</pre>\n"; print "<br />\n"; print "<br />\n"; } // ------------------------------------------------- ?> <p> </p> </body> </html>
wobei ich die Zeile:
ganz weg lassen würdesession_name("usr_login");
und keine die Session-ID in den Links machen ... der Browser weiss schon selbst welche :)
Beitrag zuletzt geändert: 7.3.2013 8:40:10 von webmag -
Hallo, danke für ere Antworten.
Habe mal alles was ihr vorgeschlagen habt ausprobiert. es geht trotzdem nicht.
session_name() vor session_start() hatte ich vorher auch schonmal probiert hat nichts genützt.
@ webmag:
Habe mal deinen code, so wie der dasteht mal reinkopiert.
Aber leider ist hier genau das selbe Ergebnis.
Wenn man die Seite neu lädt verschwindet der Session-Inhalt bzw. die SESSION Daten.
Müsste der bei einem Start einer Session nicht auch automatisch einen cookie setzen? (Sofern die nicht abgeschaltet sind.)
mfg, Michl -
Hallo
also ich habe den Code auch getestet, und bei mir funktioniert er.
Bei (Standard)
wird automatisch ein SESSION Cookie gesetzt,session_start();
das Cookie muss man dann nicht nochmal extra selber setzten.
vielleicht must Du im Browser einstellen, das SESSION Cookies akzeptiert werden.
keine Ahnung wo die Einstellung ist .... bei mir geht's ... im FF und im IE
sonst - wenn ohne Cookies - kannst Du einen verschlüsselten String (z.B. $check_key)
in den Links als Parameter übergeben und dann anstatt $_SESSION mit $_GET prüfen,
damit der Parameter auch schon direkt nach Login (mit POST) in der URL steht,
kannst Du bei erfolgreichem Login mit header() auf entsprechende URL umleiten
<?php // ------------------------------------------------- error_reporting(E_ALL); ini_set("display_errors", 1); $runfile = $_SERVER["PHP_SELF"]; ## $runfile = 'login.php'; // ------------------------------------- $testdata['user'] = 'test'; $testdata['pass'] = '123'; $secret_salt = 'u5Rt2WnB4k'; $check_key = md5($testdata['user'].$secret_salt.$testdata['pass']); // ------------------------------------------------- if (!empty($_POST['name']) && !empty($_POST['password'])) { $user_name = trim($_POST['name']); $user_pass = trim($_POST['password']); $login_key = md5($user_name.$secret_salt.$user_pass); if ($login_key == $check_key) { header('location: '.$runfile.'?xusr='.$check_key.''); } else { print "<p>Die Zugangsdaten sind falsch !!!</p>\n"; } } // ------------------------------------------------- if (!empty($_GET['xusr'])) { $run_xusr = trim($_GET['xusr']); } else { $run_xusr = ''; } // ------------------------------------------------- if (!empty($_REQUEST['seite'])) { $run_seite = trim($_REQUEST['seite']); } else { $run_seite = 'start'; } // ------------------------------------------------- if ($run_seite == 'logout') { // ---- Sessiion loeschen !!! $run_xusr = ''; header('location: '.$runfile.'?xusr=logout'); exit; } // ------------------------------------------------- ?> <!doctype html> <html> <head> <meta name="TEST" content="test" /> <link rel="stylesheet" type="text/css" href="css/style.css" /> </head> <body> <p>--- <a href="?seite=start">HOME</a> --- </p> <?php // ------------------------------------------------- if (!empty($run_xusr) && $run_xusr == $check_key) { // ------------------------------------------------- ?> <p> </p> <p>Hallo USER: <strong><?php echo $testdata['user']; ?></strong> !!!</p> <p> </p> <p>Du bist jetzt eingeloggt .... Aktuelle Seite: <strong><?php echo $run_seite; ?></strong></p> <p> </p> <?php // -------------------------- print '<p>'; print ' --- <a href="'.$runfile.'?seite=start&xusr='.$check_key.'">HOME</a>'; print ' --- <a href="'.$runfile.'?seite=blabla&xusr='.$check_key.'">BlaBla</a>'; print ' --- <a href="'.$runfile.'?seite=logout" style="color:red;">LOGOUT</a>'; print ' ---'; print '</p>' . "\n"; // -------------------------- ?> <p> </p> <?php // ------------------------------------------ $inc_seite = 'seiten/'.$run_seite.'.php'; if (file_exists($inc_seite)) { include_once($inc_seite); } else { print '<p> ... keine Seite zur Anfrage: <strong>'.$run_seite.'</strong> gefunden</p>' . "\n"; } // ------------------------------------------ ?> <p> </p> <?php // ------------------------------------------------- } else { // ------------------------------------------------- ?> <p> </p> <p>Logge dich ein!</p> <p> </p> <form action="<?php echo $runfile; ?>" method="post"> <p>Username: <input type="text" name="name" /></p> <p>Passwort: <input type="password" name="password" /></p> <p>OK: <input type="hidden" name="seite" value="start" /> <input type="submit" name="submit" value="Einloggen" /></p> </form> <p> </p> <?php // ------------------------------------------------- } // ------------------------------------------------- ?> <p> </p> </body> </html>
Diesen $check_key kann man bestimmt auch noch "sicherer" machen,
aber für erste Test-Versuche sollte dieser md5-hash ausreichend sein.
-
Hallo,
also bei mir werden Cookies deffinitiv akzeptiert. Von anderen Internetseiten werden die ja auch gespeichert.
Wenn ich die Seite aufrufe Spuckt der mir noch sowas hier aus:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php:1) in /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php on line 11
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php:1) in /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php on line 11
Wie es aussieht schafft er es nicht sachen in die Session zu schreiben.
Das kommt bei IE und bei FF.
Werde jetzt trotzdem mal rumsuchen, ob ich diese Session-Cookies doch irgendwo blokiert habe (dürfte aber nicht sein....)
*edit
Habe nochmal nachgeschaut. Hier sind meine Cookie-Einstellungen:
http://www.fotos-hochladen.net/view/cookiesztfhiyn5cu.png
mfg, Michl
Beitrag zuletzt geändert: 7.3.2013 14:46:27 von xxxparenjxxx -
hi,
diese fehlermeldung ist ja ein anzeichen dafür das schon irgendeine ausgabe vor dem session_start() passierte... überprüfe dienen code daraufhin das session_start() als allererstes notiert ist.
p.s. selbst wenn cookies blockiert wären würde php versuchen die sessionid als transparenten get-parameter zu übertragen...
Beitrag zuletzt geändert: 7.3.2013 14:48:21 von hcms -
hallo,
ja hattest recht session_start war nicht ganz am Anfang.
Jetzt sind die Fehlermeldungen zwar weg, aber trotzdem scheint das ganze nicht so ganz zu funktionieren.
Nach dem Einloggen wird mir der username also der loginname ausgegeben.
Nach dem Neuladen der Seite muss ich mich aber wieder neu einloggen -.-
mfg, Michl -
if (!empty($_SESSION['username'] )) { unterbinde erneutes Logging} else {neues Log-In starten}
hier mal ein Vorschlag mit Pseudocode.
Mfg,
timebandit
-
Also hier mal ein minimales Beispiel:
<?php session_start(); if(isset($_POST['name'],$_POST['password'])) { if($_POST['name']=='test' and $_POST['password']=='123') { $_SESSION['username'] = $_POST['name']; } } ?> <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <title>SESSION</title> </head> <body> <?php if(isset($_SESSION['username'])) { echo '<p>Hallo '.htmlentities($_SESSION['username']).'.</p>'; }else { ?> <p>Bitte melden Sie sich an.</p> <form method="post"> <p><input type="text" name="name"></p> <p><input type="password" name="password"></p> <p><input type="submit"></p> </form> <?php } echo '<br><br><br><br><br><div style="background-color:#FFD;padding:10px;"<p><u>debug:</u></p>'; echo '<p>session_id: '.session_id().'</p>'; echo '<p>$_POST: </p>'; print_r($_POST); echo '<p>$_SESSION: </p>'; print_r($_SESSION); echo '</div>'; ?> </body> </html>
kannst du hier testen: http://hcms.12hp.at/session/ -
Hallo,
also jetzt weiß ich auch nicht woran das noch liegen kann.
Am code scheinbar ja nicht.
Hab den von hcms jetzt reinkopiert und der funzt bei mir auch nicht.
Nach dem neuladen muss ich mich schon wieder neu einloggen.
Wen ihr es nicht glaubt probierts hier bitte aus. ich kan mir ned helfen -.-
http://xxxparenjxxx.lima-city.de/login.php
Werde es gleich mal noch am laptop meiner Freundin ausprobieren ob es da geht.
mfg, Michl -
also das ist ja sehr seltsam...
der code den ich genauso unter der o.g. adresse geladen hab funktioniert.
der code unter der von dir angegebenen adresse nicht.
hast du eine .htaccess am start ?
Beitrag zuletzt geändert: 7.3.2013 17:24:56 von hcms -
hcms schrieb:
hast du eine .htaccess am start ?
Sry.
keine Ahnung von .htaccess.
werde mir gleich mal was darüber durchlesen.
mfg, Michl -
Verwende als User: test
als Passwort: 123
Siehe entsprechendes JPG
Beitrag zuletzt geändert: 7.3.2013 18:26:52 von timebandit -
timebandit schrieb:
Verwende als User: test
als Passwort: 123
Siehe entsprechendes JPG
Und wie soll mir das bei der Lösung des problems helfen?
hcms schrieb:
hast du eine .htaccess am start ?
habe keine .htaccess aber ich wüsste jetzt nach dem lesen auch nicht was ich in die reinschreiben sollte damit mein problem behoben wird -.- sry -
ne, hätte ja sein können das du eine hast und dort irgendwie das problem zu finden ist (wieterleitungen, cache, etc.)...
@ timebandit:
aus deinem bild kann man erkennen das die erstmalige anmeldung funktioniert (name/pass noch im post). toll. es geht aber darum das ein reload der page danach eigentlich die session beibehalten sollte, bei xxxparenjxxx aber eine neue session gestartet wird. -
Wenn es nicht an einer .htaccess liegt, dann könnte noch
magic_quotes_gpc eine Rolle spielen.
Beim Einrichten deines Webspaces diese Konfiguration aktiviert?
Mfg,
timebandit
-
timebandit schrieb:
Wenn es nicht an einer .htaccess liegt, dann könnte noch
magic_quotes_gpc eine Rolle spielen.
Beim Einrichten deines Webspaces diese Konfiguration aktiviert?
Mfg,
timebandit
Also wenn ich in die phpinfo von lima-city reinschaue, steht da drinn dass magic_quotes_gpc off ist.
Muss ich etwas beachten wenn sie deaktiviert sind? ich dachte man müsse nur htmlspecialchars und stripslashes verwenden wenn magic_quotes_gpc on ist. Oder liege ich da falsch?
mfg, Michl
Beitrag zuletzt geändert: 7.3.2013 21:20:33 von xxxparenjxxx -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage