tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
677
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von abakuz
    abakuz abakuz ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    56
    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-Code:
    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-Code:
    $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-Code:
         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
     

  2. #2
    Avatar von abakuz
    abakuz abakuz ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    56
    Ich hatte vergessen zu schreiben das auf dem Server die PHP Version 5.1.6 läuft.
     

  3. #3
    teccco teccco ist offline Mitglied Gold
    Registriert seit
    Jan 2002
    Beiträge
    100
    index.php
    PHP-Code:
    <input type="hidden\" name=\"".session_name()."\" value=\"".session_id()."\" /> <br /> 
    Hat das Feld einen Sinn?

    logincheck.php
    PHP-Code:
    $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-Code:
       header('Location: http://www.meinedomain.de/seite1.php?'.$SID); 
    bzw:

    PHP-Code:
       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-Code:
    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.
     

  4. #4
    saila saila ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Siegburg
    Beiträge
    742
    Mein Beitrag war völlig neben der Spur. Sorry.
    Geändert von saila (14.09.06 um 11:29 Uhr)
     
    tschöh mit öh
    salia

    Wenn kein Text oben vorhanden ist, hier klicken:
    Für PHP -> FAQ
    Für PHP -> php.net
    für MySQL -> dev.mysql.com

  5. #5
    Avatar von abakuz
    abakuz abakuz ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    56
    Danke erst einmal für eure Antworten...

    Zitat Zitat von tecco
    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.


    Zitat Zitat von tecco
    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.


    Zitat Zitat von tecco
    Außerdem müsste es heissen:

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

    PHP-Code:
       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.


    Zitat Zitat von tecco
    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...).


    Zitat Zitat von tecco
    Vllt. ist es aber auch schon das fehlende $-Zeichen bei der header-Funktion.
    Ich wünschte es wäre nur das $-Zeichen...

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

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

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

    Gruß abakuz
     

  6. #6
    Kane_Kowalski Kane_Kowalski ist offline Mitglied
    Registriert seit
    Sep 2005
    Beiträge
    15

    ...seite1.php?'.session_id()...
    seit wann macht man sowas?

    SID übergaben gehen immer

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

  7. #7
    Avatar von abakuz
    abakuz abakuz ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    56
    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?


    Zitat Zitat von Kane_Kowalski
    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)
     

  8. #8
    Avatar von abakuz
    abakuz abakuz ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    56
    Zitat Zitat von saila
    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
     

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 23.06.08, 21:09
  2. Antworten: 1
    Letzter Beitrag: 02.06.06, 20:30
  3. Session in Frame geht verloren
    Von gwittmann im Forum PHP
    Antworten: 1
    Letzter Beitrag: 25.05.05, 11:53
  4. Antworten: 10
    Letzter Beitrag: 04.01.05, 17:33
  5. Session Variable verloren
    Von exitboy im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 28.09.04, 23:44