Session SID geht bei include verloren

abakuz

Mitglied
Hallo zusammen,

ich versuche seit gestern ein Fehler zu finden, der mich verzweifeln lässt.
Ihr seid mal wieder meine letzte Hoffnung...;-)

Es geht um folgendes Problem:
Die SID bzw. mein $_SESSION['SESSION_Passwort'] wird nicht richtig übergeben.

Es liegt foldende Struktur vor:


index.php
PHP:
echo "<form method=\"post\" action=\"logincheck.php\">";
echo "<input title=\"bitte Kennwort eingeben.\" name=\"kennwort\" size=\"20\" type=\"password\" /><input type=\"hidden\" name=\"".session_name()."\" value=\"".session_id()."\" /> <br /><br />";
echo "<input title=\"Hier klicken um sich anzumelden.\" class=\"buttonAnmelden\" name=\"senden\" value=\" \" type=\"submit\" />";
echo "</form>";


logincheck.php
PHP:
$Zugangspasswort = "123";
$SESSION_Passwort = $_POST['kennwort'];

if($SESSION_Passwort==$Zugangspasswort){
   session_start();
   $_SESSION['SESSION_Passwort'] = $SESSION_Passwort;
	
   header('Location: http://www.meinedomain.de/seite1.php?'.SID);
   
   exit();
 }

und die logincheck.inc.php die in jede Seite eingebunden wird, die geschützt werden soll.

PHP:
     session_start(); 
 	 
     $hostname = $_SERVER['HTTP_HOST'];
     $path = dirname($_SERVER['PHP_SELF']);

    //$_SESSION['SESSION_Passwort'] = "123";

     if (!isset($_SESSION['SESSION_Passwort']) || (!$_SESSION['SESSION_Passwort'])) {
     header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
     exit;
     }

die logincheck.inc.php wird z.B. (wie weiter oben im header) mit "include" in die seite1.php eingebunden.

Mein Problem ist nun, das die $_SESSION['SESSION_Passwort'] in der logincheck.inc.php nicht erkannt wird,
das heisst sie geht irgendwo verloren.
Wenn ich den das Passwort (123) von $_SESSION['SESSION_Passwort'] in die logincheck.inc.php direkt eingebe dann funktioniert es und ich komme auf die geschützte Seite, sonst lande ich, wie auch im Code vorgegeben, wieder auf der index.php Seite.
Ich habe mit echo $_SESSION['SESSION_Passwort']; den Inhalt anzeigen wollen und da
steht, wie vermutet, nichts drin, also keine SESSION Übergabe.
Wieso geht denn die SESSION bei der .inc-Datei verloren?

Kann mir bitte jemand weiterhelfen?!
Ich blick da nicht mehr durch.

Vielen Dank im vorraus!

Gruß abakuz
 
index.php
PHP:
<input type=\"hidden\" name=\"".session_name()."\" value=\"".session_id()."\" /> <br />

Hat das Feld einen Sinn?

logincheck.php
PHP:
$Zugangspasswort = "123";
$SESSION_Passwort = $_POST['kennwort'];

if($SESSION_Passwort==$Zugangspasswort){
   session_start();
   $_SESSION['SESSION_Passwort'] = $SESSION_Passwort;
    
   header('Location: http://www.meinedomain.de/seite1.php?'.SID);
   
   exit();
 }

Bin mir ziemlich sicher, dass der Quelltext nicht gehen dürfte, da header() eigentlich als Error geben sollte: "Headers already sent", weil session_start() schon aufgerufen wurde.

Außerdem müsste es heissen:

PHP:
   header('Location: http://www.meinedomain.de/seite1.php?'.$SID);

bzw:

PHP:
   header('Location: http://www.meinedomain.de/seite1.php?'.session_id());

und die logincheck.inc.php die in jede Seite eingebunden wird, die geschützt werden soll.

PHP:
session_start();

Wird vor der logincheck.inc.php schon bereits ein session_start() aufgerufen? Wenn ja, könnte das auch der Fehler sein.

Vllt. ist es aber auch schon das fehlende $-Zeichen bei der header-Funktion.
 
Danke erst einmal für eure Antworten... :)

tecco hat gesagt.:
Hat das Feld einen Sinn?

Gute Frage, ich denke es müsste auch ohne dem Hidden-Feld funktionieren.
Aber daran liegt es sicherlich nicht.

Das Phänomen ist das die ganze Seit vorher einwandfrei funktioniert hat.
Vorher hatte ich es als Subdomain eingerichtet.
Nun habe ich die Daten aus der Subdomain in eine "normale" Domain rüberkopiert (bei dem selben Anbieter) und nun geht das LogIn nicht mehr.


tecco hat gesagt.:
Bin mir ziemlich sicher, dass der Quelltext nicht gehen dürfte, da header() eigentlich als Error geben sollte: "Headers already sent", weil session_start() schon aufgerufen wurde.

Da kommt kein "Headers already sent", es kommt leider gar keine Fehlermeldung.


tecco hat gesagt.:
Außerdem müsste es heissen:

PHP:
   header('Location: http://www.meinedomain.de/seite1.php?'.$SID);

bzw:

PHP:
   header('Location: http://www.meinedomain.de/seite1.php?'.session_id());


ich habe das immer ohne $ gesehen, aber ich gehe auch dieser Sache mal auf die Spur.


tecco hat gesagt.:
Wird vor der logincheck.inc.php schon bereits ein session_start() aufgerufen? Wenn ja, könnte das auch der Fehler sein.

Ja, es wird ein Session gestartet auf der index.php und in der logincheck.php.
Auf der index.php weil ich damit, bei erfolgreichem Login das Eingabeformular ausblende und ein LogOut anzeige.
Bei der logincheck.php, weil ich dort die Eingabe des Users überprüfe (Passwort richtig? etc..) und einen Hinweis ausgebe (Bitte erst anmelden...blablabla...).


tecco hat gesagt.:
Vllt. ist es aber auch schon das fehlende $-Zeichen bei der header-Funktion.
Ich wünschte es wäre nur das $-Zeichen... ;)

-------------------------

saila hat gesagt.:
<form action="blabal.php?session_id=SID" method="post">
Was möchtest Du mir damit sagen?

-------------------------

Gruß abakuz
 
Also, hab das ganz mal ohne include ausprobiert doch leider das gleiche Problem, die Session wird angezeigt, aber der Inhalt von $_SESSION['SESSION_Passwort'] ist leer.

Kann das ganz vielleicht damit zusammenhängen, dass session.use_trans_sid=0 ist?


Kane_Kowalski hat gesagt.:
seit wann macht man sowas?

SID übergaben gehen immer

....seite1.php?".session_name( )."=".sesion_id( )...

stimmt... in der SID steht ja nichts anderes drin als: session_name( )."=".sesion_id( ).
(wenn ich das richtig verstanden habe)
 
saila hat gesagt.:
Mein Beitrag war völlig neben der Spur. Sorry.
Zumindest hast Du versucht zu helfen... :)

Habe den Fehler gefunden, der Code weiter oben ist richtig, der Fehler lag wo anders.
Nach der Umstellung von Subdomain auf "richtige" Domain, hat mein netter Provider den tmp-Ordner wo die Sessions gespeichert werden auf
rw-rw-rw- gesetzt. Warum das per default so ist versteh ich zwar nicht, aber nach der Änderung in rwxrwxrwx klappte alles wunderbar.
Der ganze Spaß hat mich jetzt fast 3 Tag gekostet...grrrr...


Vielen Dank für eure Bemühungen!

Gruß abakuz
 
Zurück