Problem mit Session und Login



  • So,

    vielleicht habe ich das ganze Thema falsch verstanden. Wozu brauche ich Cookies wenn ich die Session Id, welche übrigens richtig ist auch in den nachfolgenden Seite, per post in einem hidden Feld weiterreiche?

    Wie würdet ihr das denn machen?
    Ich brauche so was wie eine Login Seite, wo nur ein Passwd abgefragt wird. Auf der nächsten Seite soll es dann mit einem bereits verschlüsselten passwd in einer include Datei verglichen werden. Wenn beide ungleich dann wieder login. Soweit alles kein Problem.
    Ich habe auf dieser Seite ein neues Formular. Dieses Formular sendet seine Daten an eine Dritte Seite. Auch heri soll wieder das passwd verglichen werden.
    Das könnte ich auch noch durch weiterreichen in textfeldern erreichen. Ist ja alles kein Problem.
    Jetzt hat aber die dritte Seite einen Link zur ersten, sozusagen einen Home-Link. Wenn ich den aber aufrufe, dann weiß die erste Seite ja aber nicht das ich bereits eingeloggt bin, da ja kein per post gesendetes passwd vorhanden.
    Da dachte ich kommen nun sessions zum Einsatz.



  • Also im "Normalfall" wird die Session-ID in einem Cookie gespeichert, und wenn das nicht geht (oder in der php.ini anders eingestellt ist) per GET. Wenn enable-trans-id (bin gerade zu faul zum Nachschlagen, ob das so hieß 🤡 ) beim Compilieren von php mit angegeben wurde und afaik in der php.ini aktiviert ist, dass werden URLs, die auf den gleichen Server verweisen ggf. automatisch um die Session-ID ergänzt.

    Also bei dir wird jetzt mit echo session_id(); auf jeder Seite die gleiche ID ausgegeben?
    Hast du PHP >= 4.1.0
    Was gibt ein var_dump($_SESSION) nach session_start() aus?



  • Hast du schon mal versucht die benötigten Variablen per session_register
    in der Session zu registrieren??
    Soweit ich weiß muss jede Variable bevor man sie verwenden kann, erst einmal in der Session registriert werden, und später mit der gleichen Funktion auch wieder zur Verfügung gestellt werden.
    Das heißt:

    <?php 
     session_start(); 
    
     // du prüfst übrigens die Userdaten bevor du sie irgendeiner lokalen Variablen zu gewiesen hast, also:
    
     $pass1 = md5($_POST['pass']);
     session_register(pass1);
    
     include("include.php"); 
    
        if( !isset($_POST['pass']) ) 
        { 
            //show admin-login 
            include("login.php"); 
            exit; 
        } 
    
        $pass1 = md5( $_POST['pass'] ); 
        $_SESSION['pass'] = $pass1; 
    
        if ( $pass1 != $passwort ) 
        { 
            echo "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Falsche Passworteingabe</font>"; 
            include("login.php"); 
            exit; 
        } 
    ?> 
    
    <form name="form1" method="post" action="seite3.php"> 
    <input name="Submit2" type="submit" class="submit" value="Seite anlegen"> 
    <input name="PHPSESSID" type="text" id="PHPSESSID" value="<?php echo session_id();?>"> 
    </form>
    


  • session_register ist definitiv nicht notwendig.
    Genauso wie Session_unregister. (man nimmt hier unset)

    Einer Standardinstallation mit Apache und PHP muss man die SID übergeben. Mache es mal so wie ich dir aufgezeigt habe und sdchau nach ob in SID immer die gleiche SID drin ist. Ich habe hier viele Seiten (auch CHAT) wo ich es so machen und es funktioniert. Und egal welche Einstellungen der Apache und PHP hat, sollte man sowieso immer die SID w.o. übergeben.
    Wenn Cockies aktiviert sind ist sie eben leer. Wenn Cockies deaktiviert sind steht in der SID was drin. Will man noch andere Parameter an die URL anhängen ist SID immer der letzte Parameter.



  • So,

    @Unix-Tom: Ich mache es doch schon so wie du gesagt hast. Ich übergebe die Sessionid immer in einem hidden feld per post weitergebe.
    Sie ist auch immer richtig die selbe.
    Habe ich das richtig verstanden, das ich jetzt immer nur überprüfen brauche ob die übergebene mit der in der Session Variablen gespeicherten übereinstimmt?
    Oder wie?



  • Hast du jetzt mal ein var_dump($_SESSION) gemacht? Und: was für eine PHP-Version läuft bei dir?



  • @ flenders: Das var_dump gibt folgendes aus: array(1) { ["passwd"]=> string(5) "testen"}
    und die Version die ich habe ist: 4.3.4
    Und das sind die EInstellungen bezüglich Session:

    Directive Local Value Master Value
    session.auto_start Off Off
    session.bug_compat_42 On On
    session.bug_compat_warn On On
    session.cache_expire 180 180
    session.cache_limiter nocache nocache
    session.cookie_domain no value no value
    session.cookie_lifetime 0 0
    session.cookie_path / /
    session.cookie_secure Off Off
    session.entropy_file no value no value
    session.entropy_length 0 0
    session.gc_divisor 100 100
    session.gc_maxlifetime 1440 1440
    session.gc_probability 1 1
    session.name PHPSESSID PHPSESSID
    session.referer_check no value no value
    session.save_handler files files
    session.save_path E:\Server\php\sessiondata E:\Server\php\sessiondata
    session.serialize_handler php php
    session.use_cookies On On
    session.use_only_cookies Off Off
    session.use_trans_sid Off Off



  • Und was gibt var_dump($_SESSION) auf seite3.php aus? Was genau steht alles in include.php?



  • Var_dump gibt auch auf der dritten Seite das gleiche aus.
    In der include Datei steht nur $passwort = "f5888d0bb58d611107e11f7cbc41c97a";

    also das verschlüsselte Passwort.
    Ich denke auch nicht das der Fehler irgendwie mit der Session an sich was zu tun hat, sondern eher mit meiner Vorgehensweise.
    Was wäre denn gut?
    Ich Starte mit der Loginseite; nach erfolgreichem Login gelange ich auf die erste Seite und starte eine Session; Diese Session speichere ich in eine globale Sessionvariable und leite sie zusätzlich noch per Post an die 2. Seite. Hier vergleiche ich das übergebene Passwort mit dem in der Session Variable, und so würde ich auch zur dritten Seite gelangen.
    Was ich jetzt nur nicht weiß ist, wenn zum Beispiel auf der dritten Seite was mit der Berechnung schiefläuft oder der User zurück auf die 2. Seite möchte,
    Wie mache ich das? Einfach so:

    /*Bei Fehler*/
    if (Fehler )
    {
       include("Seite2");
       exit;
    }
    .
    .
    .
    /*Link zurück*/
    <a href="seite2.php">zurück</a>
    

    Würde das so gehen? Aber woher sollte dann Seite2 noch wissen was sie von Seite1 übergeben bekommen hatte?
    Es sind also mehr Probleme mit der Struktur die ich habe.



  • Wenn du Werte auf einer beliebigen Seite in der Session speicherst (wie kannst du die Session in einer globale Sessionvariable speichern 😕 🤡 ) kannst du auf diese Werte von überall aus zugreifen. Wenn du also später die Daten, die an Seite1 übergeben wurden noch brauchst speicherst du sie am besten in der Session (theoretisch könntest du sie auch über die URL weiterreichen, aber genau das ersetzen ja eigentlich die Sessions 😉 )

    Das mit deinem include("Seite2"); verstehe ich nicht so ganz - ob das wie gewünsch funktioniert hängt dasvon ab, wie du den Aufbau hast. Ich denke aber, dass du eher eine richtige Weiterleitung machen willst: 🙂

    header('Location: http:[e]#47[/e]/'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/seite2.php');
    

Anmelden zum Antworten