header("Location:..."); Unterschiede zw. Browsern?

HPB

Erfahrenes Mitglied
Hallo,
ich habe eine Login Script in Anlehnung an http://www.tutorials.de/tutorials9684.html geschrieben.
Mit meinem Mozilla Browser klappt das auch hervorragend. Nur mit IE nicht.

Ich habe eine Seite login.php, die mit
PHP:
$_SESSION["user_id"] = $Id;
die ID des Users speichert, falls User/PW mit den Werten in der DB übereinstimmen.
In jeder Seite frage ich dann ab, ob es in der Session Umgebung diese ID gibt:
PHP:
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
  echo "checkuser.php: keine User_id in Session gefunden: ".$_SESSION["user_id"];
  //header ("Location: login_form.php");
}
?>
Ist die ID in der Session Umgebung vorhanden, so folgt nun mein normaler Code, ansonsten soll die Login-Seite angezeigt werden.
Zum Debugging habe ich die Weiterleitung durch eine Ausgabe der user_id ersetzt. Im Mozilla ist hat $_SESSION["user_id"] den richtigen Wert, im IE nicht.
Was mache ich falsch, woran kann es liegen?

Danke für die Hilfe,

PETER
 
Das könnte daran liegen, dass der IE die Session verliert weil er nach Standardeinstellung keine Cookies annimmt. Das ganze lässt sich umgehen, indem du in der URL die SessionID übergibst und dann ausliest und auf der Grundlage die Session wieder startest.
 
Du kannst die Variable $_SESSION['user_id'] nicht ausgeben, wenn sie nicht gesetzt ist. Jeder Browser wird dir da garnichts bzw. eine Fehlermeldung anzeigen.
 
Kann mit jemand den Beitrag von Karl Förster näher erklären?

Danke,

PETER


---------------------------------------------------------------------------------------------
@Oliver: Die User_id speichere ich in der Datei login.php in der Session umgebung.
login_form.php: User gibt Benutzername+pw ein (action="login.php")
login.php: Vergleichen, ob user und PW so in DB bespeichert. Falls ja-->user_id in Session speichern und Weiterleitung, falls sein zurück zu login_form.php
In jeder Datei müsste man dann doch auf die Session zugreifen können, oder? (Es sei denn die Session geht verloren :( )
 
PHP:
if (!isset ($_SESSION["user_id"]))
{
     echo "checkuser.php: keine User_id in Session gefunden: ".$_SESSION["user_id"]; //$_SESSION["user_id"] kann hier nicht existieren !
}
 
Wieso? In login.php steht: $_SESSION["user_id"] = $Id;.
Dann müsste ich doch in den anderen Dateien darauf zugreifen können. Mit dem Mozilla geht es ja auch. Die Idee hatte ich schießlich auch nicht selbst, sondern hier aus einem tutorial http://www.tutorials.de/tutorials9684.html

Wer kann mir die Bemerkung von Karl Förster erklären?

Danke,

PETER
 
PHP:
if(!isset($_SESSION['user_id'])) {echo $_SESSION['user_id'];}
heißt: Falls die Variable $_SESSION['user_id'] nicht gesetzt ist, dann gebe sie aus. Das kann nicht funktionieren.
 
Ups, da hast du recht. Meine Debugging- Ergänzungen waren echt falsch. Das löst aber mein eigentliches Problem nicht.

Mein Problem läßt sich also auf folgendes reduzieren:
in meiner ersten Datei steht:
PHP:
session_start ();
$_SESSION["user_id"] = $Id;
header ("Location: datei2.php");

in der 2 Datei:
PHP:
session_start ();
if (!isset ($_SESSION["user_id"])) echo "Fehler!";
else echo "mein Inhalt"

Mit Mozilla klappt's. Mit IE ist die User_id nicht mehr vorhanden.

Wer kann mir helfen?
 
Oliver Gringel hat gesagt.:
Dann solltest du beim IE auch Session-Cookies akzeptieren.

Das ist genau das, was ich gesagt habe, nur in Kurzform :D

Du könntest es in deinem Code so versuchen:
PHP:
session_start ();
$_SESSION["user_id"] = $Id;
header ("Location: datei2.php?".session_name()."=".session_id());
 
Zurück