Session wird nicht erkannt
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bann
bereich
code
datum
fehler
fehlermeldung
header
index
initial
konfiguration
layout
login
paar
phase
portal
problem
session
spiel
text
zeug
-
Hallo, Leute! Ich habe ein Problem mit einem Projekt (zu finden auf space-pirates.lima-city.de)...
Das Portal, auf welches ihr über diesen Link gelangt; habe ich selbst entwickelt...
Da mein letzter Hoster mich ohne Nennung eines Grundes gesperrt hat, habe ich das Zeug heute bei Lima hochgeladen.
Leider funktioniert der Login-Bereich nicht mehr...
Klick man auf "eingeloggt bleiben" kommt die Fehlermeldung, dass die Anfrage unendlich oft umgeleitet wird (sofern Benutzerdaten stimmen), klickt man dies nicht an, passiert gar nichts; außer dass man umgeleitet wird.
Nach einigem Herumprobieren habe ich herausgefunden, dass auf die gesetzte Session nicht zugegriffen werden kann, sie aber gesetzt wird. Werden Cookies gesetzt, die Session aber nicht erkannt, versucht das Programm sich immer wieder einzuloggen; daher die Schleife.
Was ich jedoch nicht herausgefunden habe, ist warum die Sessions nicht erkannt werden;
bei dem alten Hoster klappte alles und auch von anderen Leuten, die mein Portal nutzen, gab es diesbezüglich nie Probleme...? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Da du uns keinen Code zeigst, können wir nur raten.
Vielleicht wird die Session nicht mit session_start() gestartet. -
session_start() wird verwendet...
'habe gerade mittels print_r($_SESSION) rausgekriegt, dass die Session zwar eigentlich gesetzt wird, jedoch sofort wieder verfällt und nach der Umleitung zur nächsten Datei weg ist...?
Hier mal ein paar Auszüge aus dem Quelltext:
login.php (Loginbereich):
<?php include "inc/initial.php"; if ( $_SESSION["user_id"]) { header("Location: index.php"); } $page_name="Login-Bereich"; require_once ("inc/_header.php"); ?> <form action="index.php" method="post" name="formular" onSubmit="if(this.login.value=='' || this.pass.value==''){ alert('Nicht alle Felder ausgefüllt!'); return false; }"> <center> <img src="<?php echo $skrupel_path; ?>bilder/logo_login.gif" width="329" height="208" alt="Skrupel Logo" title="" /><br> <table border="0" cellspacing="0" cellpadding="4" align="center"> <?php if (isset($login_error) && $login_error=="wrong_data"){ ?> <tr><td /><td style="color:red;">Login-Daten falsch.</td></tr> <?php } else if (isset($login_error) && $login_error=="bann"){ ?> <tr><td /><td style="color:red;">Dieser Account wurde aus dem Portal gebannt.</td></tr> <?php } ?> <tr> <td align="right">Benutzername </td> <td><input type="text" name="login" maxlength="50" style="width:350px;<?php if(isset($_POST["login"])){ ?> border-color:red; color:red<?php } ?>" value="<?php if (isset($_POST["login"])) { echo $_POST["login"]; } else { echo $HTTP_COOKIE_VARS["login_name"]; } ?>" /></td> </tr> <tr> <td align="right">Passwort </td> <td><input type="password" name="pass" maxlength="50" style="width:350px;<?php if(isset($_POST["login"])){ ?> border-color:red; color:red<?php } ?>" value="" /></td> </tr> <tr><td /><td align="center"><input type="submit" name="submit" value="Login" style="width:300px;" /> </td> </tr> <tr> <td /><td align="left"> <input type="hidden" name="return" value="active.php" /> <input type="checkbox" name="cookie" /> Bei Seitenbesuchen automatisch einloggen </td></tr> </table> </center> </form> <?php require_once ("inc/_footer.php"); ?>
index.php (setzt die Sessions):
<?php session_start(); if ( !is_file("inc/conf.php") ) { header("Location: install.php"); die("Bitte Konfiguration überprüfen"); } require_once "inc/conf.php"; if ( !is_file($skrupel_path."inc.conf.php") ) { header("Location: install.php"); die("Bitte Konfiguration überprüfen"); } require_once $skrupel_path."inc.conf.php"; require_once "inc/_db.php"; if ($_POST["login"] && $_POST["pass"]) { require_once "inc/_db.php"; $sql = "SELECT user.*, spiele.sid FROM $skrupel_user AS user LEFT JOIN $skrupel_spiele AS spiele ON phase = 0 AND (user.id = spieler_1 OR user.id = spieler_2 OR user.id = spieler_3 OR user.id = spieler_4 OR user.id = spieler_5 OR user.id = spieler_6 OR user.id = spieler_7 OR user.id = spieler_8 OR user.id = spieler_9 OR user.id = spieler_10) WHERE user.nick=\"{$_POST["login"]}\" AND user.passwort=\"{$_POST["pass"]}\" GROUP BY user.id"; $query = mysql_query($sql); if ( mysql_num_rows($query) == 1 ) { $data = mysql_fetch_assoc($query); if ($data["portal_bann"]!=1) { $_SESSION["user_id"] = $data["id"]; $_SESSION["uid"] = $data["uid"]; $_SESSION["sid"] = $data["sid"]; $_SESSION["name"] = $data["nick"]; $_SESSION["pass"] = $_POST["pass"]; $_SESSION["mail"] = $data["email"]; $_SESSION["layout"] = $data["portal_layout"]; setcookie("mail", $data["email"], time()+$cookie_dauer); setcookie("login_name", $data["nick"], time()+$cookie_dauer); setcookie("layout", $data["portal_layout"], time()+$cookie_dauer); if ($_POST["cookie"]=="on" || $_POST["cookie"]=="true") { setcookie("user", $data["nick"], time()+$cookie_dauer); setcookie("password", $_POST["pass"], time()+$cookie_dauer); } $zeiger = mysql_query("INSERT INTO $skrupel_chat (datum,text,von,farbe) VALUES ('".time()."', '".$_POST["login"]." hat sich eingeloggt.', 'System', '000000')"); } else { $login_error="bann"; } } else { $login_error="wrong_data"; } } // print_r($_SESSION); exit; if (isset($_SESSION["user_id"]) && $_POST["return"] && file_exists($_POST["return"])) { header('Location:'.$_POST["return"]); exit; } else if (isset($_SESSION["user_id"]) && $_SERVER["HTTP_REFERER"] && file_exists($_SERVER["HTTP_REFERER"])) { header('Location: '.$_SERVER["HTTP_REFERER"]); exit; } else if (isset($_SESSION["user_id"])) { header('Location: active.php'); exit; } if (!$_SESSION["user_id"]) { require "login.php"; } ?>
inc/initial.php (greift auf Sessions zurück):
<?php require_once ("inc/conf.php"); require_once ($skrupel_path."inc.conf.php"); session_start(); // print_r($_SESSION); if (! isset($_SESSION["layout"]) && isset($HTTP_COOKIE_VARS["layout"])) { $_SESSION["layout"] = $HTTP_COOKIE_VARS["layout"]; } else if (! isset($_SESSION["layout"]) && ! isset($HTTP_COOKIE_VARS["layout"]) && isset($template)) { $_SESSION["layout"] = $template; setcookie("layout", $template, time()+$cookie_dauer); } else if (! isset($_SESSION["layout"]) && ! isset($HTTP_COOKIE_VARS["layout"]) && ! isset($template)) { $_SESSION["layout"] = "classic"; setcookie("layout", "classic", time()+$cookie_dauer); } if (! file_exists("styles/".$_SESSION["layout"]."/css/style.css") && file_exists("styles/".$template."/css/style.css")) { $_SESSION["layout"]=$template; } else if (! file_exists("styles/".$_SESSION["layout"]."/css/style.css")) { require("styles/design.php"); $_SESSION["layout"]=$design[0]["path"]; } require "inc/_db.php"; if ( isset( $_SESSION["user_id"] ) ) { $sql = "SELECT user.uid, spiele.sid FROM $skrupel_user AS user LEFT JOIN $skrupel_spiele AS spiele ON phase = 0 AND (user.id = spieler_1 OR user.id = spieler_2 OR user.id = spieler_3 OR user.id = spieler_4 OR user.id = spieler_5 OR user.id = spieler_6 OR user.id = spieler_7 OR user.id = spieler_8 OR user.id = spieler_9 OR user.id = spieler_10) WHERE user.id=\"{$_SESSION["user_id"]}\" GROUP BY user.id"; $query = mysql_query($sql); if ( mysql_num_rows($query) == 1 ) { $data = mysql_fetch_assoc($query); $_SESSION["uid"] = $data["uid"]; $_SESSION["sid"] = $data["sid"]; $update=mysql_query("UPDATE $skrupel_user SET portal_activity='".time()."' WHERE id='".$_SESSION["user_id"]."' "); } } else if ($_COOKIE["user"] && $_COOKIE["password"]) { $_POST["login"] = $_COOKIE["user"]; $_POST["pass"] = $_COOKIE["password"]; $_POST["return"] = $_SERVER["PHP_SELF"]; include "index.php"; exit; } ?>
Beitrag zuletzt geändert: 15.10.2011 22:59:05 von anti-atomkraft -
Schalte mal das error_reporting ein. Das müsste doch ein paar Fehler melden.
WHERE user.nick=\"{$_POST["login"]}\"
AND user.passwort=\"{$_POST["pass"]}\"
Verwende niemals Daten von Besuchern direkt in MySQL. Stichworte: SQL-Injection und zum sichern mysql_real_escape_string()
header("Location: install.php");
die("Bitte Konfiguration überprüfen");
Das die() ist sinnlos, da es niemals angezeigt wird. Den Text brauchst du also nicht.
$HTTP_COOKIE_VARS ist komplett veraltet. Benutze $_COOKIE.
$_POST["return"] = $_SERVER["PHP_SELF"];
1. Solltest du POST, GET, usw. nicht überschreiben.
2. PHP_SELF ist unsicher. Nimm besser SCRIPT_NAME.
Wenn du in der inc/initial.php am Ende index.php inkludest, startest du damit die Session 2x.
Beitrag zuletzt geändert: 15.10.2011 23:20:48 von chatter -
Also,
error_reporting() ist an, ergibt aber keine Fehler, was mich auch schon gewundert hat.
Da ich das Zeug öffentlich bereitstelle, ist die() nicht sinnlos:
Bei einer falschen Codierung, wie UTF-8 mit BOM, bei der header() nicht funzt, soll das Skript wenigstens abgebrochen werden.
Auf $_COOKIE steige ich noch um, lief nur beim alten Hoster nicht....
Da die Cookies (im Gegensatz zu den Sessions) erkannt werden, vermute ich, dass hier beides geht.
Der Teil
else if ($_COOKIE["user"] && $_COOKIE["password"]) { $_POST["login"] = $_COOKIE["user"]; $_POST["pass"] = $_COOKIE["password"]; $_POST["return"] = $_SERVER["PHP_SELF"]; include "index.php"; exit; }
in der initial hat den Zweck, dass wenn Cookies gesetzt sind, aber keine Session der Nutzer automatisch eingeloggt wird ("Passwort merken"-Funktion). Das hat schon seine Richtigkeit...
Bzgl. Sicherheit: Darum kümmere ich mich noch, aber erstmal muss alles funktionieren...
Und solange die wichtigste Funktion (nämlich der Login) nicht geht, ist das Nebensache...
Beitrag zuletzt geändert: 15.10.2011 23:35:28 von anti-atomkraft -
Habe auch seit heute das Problem mit SESSION.
Bekomme immer die FehlermeldungError #2 session_start() [function.session-start]: Cannot find save handler 'memcached' - session startup failed Array
Habe am Code aber nichts geändert, gestern lief noch alles einwandfrei... -
Hast Recht. Bei mir gehen Sessions auch nicht :(
-
Naja, ich bekomme ja noch nichtmal eine Fehlermeldung...?
Möglicherweise stiimt irgendetwas mit der php.ini nicht (dann müsste es spätestens am 19. wieder gehen), aber dies halte ich für unwahrscheinlich...
Nachtrag: Super! Jetzt, wo das "Session-Problem" behoben ist, geht wieder alles...
Also doch nicht mein Fehler!
-> Kann geschlossen werden
Beitrag zuletzt geändert: 16.10.2011 23:02:18 von anti-atomkraft -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage