SESSION verliert variablen auf übernächster seite

forsakingmax

Grünschnabel
Hallo!

Ich bin schon langsam am Ende mit meinem Latein. Ich möchte einen einfachen Einlogg-Vorgang programmieren, der theoretisch auch schon funktionieren müsste:

1) Auf der Seite EINLOGGEN.PHP übermittele ich die Forumlar-Daten an die Datei LOGIN.PHP

2) Auf LOGIN.PHP schau ich in der Db anch, obs den User mit dem Passwort gibt etc und speichere die USer_ID in die Session. Und zwar so:

session_start();
$_SESSION['user_id']=$irgendwas;

Zur Sicherheit gebe ich mir auf derselben Seite nochmal USer_ID aus der Session aus => funktioniert!

3) danach geht es per HTML-META Weiterleitung auf EINGELOGGED.PHP. Doch sobald ich dann auf dieser Seite oder einer folgenden auf die User_ID zugreifen möchte, existiert diese nicht mehr! Obwohl ich wieder mit session_Start() die Session starte und dann die Variable rausholen möchte...

Bitte um Hilfe, ich bin am verzweifeln!

MFG
Markus
 
Normalerweise schon, aber versuch mal nach dem Link
Code:
<?php echo SID ?>
anzuhängen. Wenns auch nicht funktioniert dann mal den Code posten
 
Hallo!

Ich habe ein ähnliches Problem, konnte aber bisher auch noch keine Lösung finden. Ich schildere euch einmal meinen Code. Vielleicht kann mir jemand weiterhelfen.

Zuerst wird auf allen Seiten welche geschütz werden eine Session gestartet und mit
PHP:
require_once();
ein Script eingebunden welches die session variable $_SESSION['login'] prüft. Sollte diese nicht vorhanden oder mit dem falschen Inhalt befüllt sein, leitet einen das Script per header wieder auf die Login Seite zurück. Wenn die Variable passt, passiert nix und die Seite wird geladen.

Jetzt zur Login Seite. Zuerst prüfe ich das eingegeben Kennwort mit dem in der DB hinterlegten Passwort. Wenn die Kennwörter übereinstimmen, wird mit
PHP:
session_start();
eine Session gestartet. Dann wird die oben erwähnte Session Variable $_SESSION['login'] gesetzt
PHP:
$_SESSION['login'] = "ok";
Zuletzt wird noch die Url angegeben und die Session ID drangehängt
PHP:
$url="index2.php?".session_name()."=".session_id()
Dann wird über den header dorthin weitergeleitet.

Nach dem korrekten Login, komme ich auch noch ohne Probleme auf die erste Seite (Menü). Dort kann ich die Session Variable ausgeben und die URL ist auch ok. Wenn ich jetzt aber auf einen Menüpunkt klicke, wird an die URL zwar wieder korrekt die ID dranngehängt, auf der aufgerufenen Seite kann aber die Session Variable nicht mehr ausgelesen werden und ich fliege wieder zurück zum Login.

Hat jemand eine gute Idee was noch falsch sein könnte
 
Eigentlich brauchst Du die Session nicht an die URL anzuhängen. Diese wird normalerweise auf dem Server gespeichert und behält ihren Wert bis das Browserfenster geschlossen oder mittels session_destroy() "gelöscht" wird.
Poste doch mal bitte den kompletten Code aller Dateien.
 
Gut, also hier ist mein Code:

Der Code zum Prüfen ob die Session Variable korrekt ist (wird in jede geschützte Datei eingebunden -> "logcheck.php"):
PHP:
session_start();
  if(!isset($_SESSION['login']) || $_SESSION['login'] != "ok") {
    $url = $_SERVER['SCRIPT_NAME'];
	if (isset($_SERVER['QUERY_STRING'])) {
	  $url .= "?".$_SERVER['QUERY_STRING'];
	}
	header("Location: index.php?url=".urlencode($url));
  }

Der Code auf der Login Seite:
PHP:
if(isset($_POST["login"]) && isset($_POST["passwort"])) {
  include("dblogin.php");
  $login = $_POST["login"];
  $sql = "SELECT * FROM usa_logins WHERE Login = '$login";
  $ergebnis = mysql_query($sql);
  $user = mysql_fetch_array($ergebnis);
  mysql_free_result($ergebnis);
  mysql_close();
  if(md5($_POST["passwort"]) === $user["PW"]) {
    session_start();
    $_SESSION['login'] = "ok";
	$url = (isset($_GET["url"])) ? $_GET["url"].session_name()."=".session_id() : "index2.php?".session_name()."=".session_id();
	header("Location: $url");
  }
}

Der Code auf der ersten geschützten Seite (Menü -> funktioniert noch korrekt):
PHP:
session_start();
require_once "logcheck.php";
Und der Link zur nächsten Seite:
PHP:
<a href="tagebuch.php?<?php echo(session_name().'='.session_id());?>" class="spezial">Eintrag1</a>

Der Code auf der Seite zu der dieser Link führt:
PHP:
session_start();
require_once "logcheck.php";

Bis auf den Link steht alles ganz am Anfang jeder .php Datei also noch vor den HTML Tags.
 
Zurück