Session läuft aus / Login-Umstellung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Session läuft aus / Login-Umstellung

    Hallo,

    ich habe mal eine Frage.
    Meine Login-"Funktion" sieht zur Zeit wie folgt aus:

    - Benutzer gibt Username + PW im Formular an und postet diese Daten an eine andere PHP-Datei
    - Diese zweite Datei überprüft, ob in der MySQL-DB ein Datensatzer existiert, bei dem Username und PW mit den geposteten Werten übereinstimmt
    - Ist das Ergebnis positiv arbeite ich mit einer Session_ID:


    PHP-Code:
    $sessionid=session_id();
    $userx=$username;
    session_start();
    $_SESSION['sessionid']=$sessionid;
    $_SESSION['user_id']=$user_id
    Bei jeder Seite, die nur für eingeloggte User sichtbar sein soll,
    überprüfe ich dann die Session_ID wie folgt:

    session_start();
    if ((isset ($_SESSION['xyz'])...bla

    Das funktioniert auch wunderbar.
    Allerdings gibt es ein Problem:

    Wenn ein User einen langen Beitrag in mein Forum posten will und dafür zu viel Zeit braucht, dann ist er nicht mehr eingeloggt wenn der Beitrag abgeschickt werden soll und die vielen getippten Zeilen sind futsch.
    Das ist ziemlich ärgerlich und ich möchte das gerne verbessern.

    Wie mache ich das am besten/sichersten/einfachsten ?

    Ich habe keinen eigenen Server. Die Dateien liegen also bei einem Dienstleister, und somit kann ich auch nicht z.B. was in der php.ini verändern.

    Praktisch wäre es, wenn der User automatisch erkannt und damit eingeloggt wäre.

    Wie geht das?
    Ich habe schon gegoogelt nach Login mit Session_ID und Cookie, aber irgendwie finde ich nichts brauchbares.

    Bin für jeden Tipp dankbar!

    Viele Grüße,
    Dennis

  • #2
    http://de.php.net/manual/en/ref.sess...gc-maxlifetime

    Kommentar


    • #3
      Hallo,

      Danke für den Link, aber muss man das nicht in der php.ini ändern ?
      Darauf habe ich, wie erwähnt, leider keinen Zugriff.

      Gruß,
      Dennis

      Kommentar


      • #4
        ... ist PHP_INI_ALL ... Appendix G: "Entry can be set anywhere".

        ini_set()

        Kommentar


        • #5
          @onemorenerd
          Dies kann vom Anbieter ganz einfach gesperrt werden.

          Versuchs mal mit dem:
          session_set_cookie_params()

          Kommentar


          • #6
            Schon klar, aber erstmal ausprobieren ...


            Cookie-Parameter dürften übrigens kaum helfen, wenn serverseitig die Session vom GC gefressen wird. Und Wenn ich es richtig sehe, schließt der "tippende User" seinen Browser nicht, der Sessioncookie existiert also noch. Was soll man da noch an seinen Parametern drehen?

            Kommentar


            • #7
              Hallo,

              ich habe jetzt mal
              session_set_cookie_params();
              versucht.

              Eine Fehlermeldung kam nicht. Mal sehen, wie lange die Session jetzt gültig ist.

              Bis hier hin vielen Dank!

              Gibt es eine sichere Methode, dass der Benutzer bei einem neuen Login automatisch eingeloggt wird und eine neue Session_ID erhält, ohne dass er Username + PW angeben muss ?

              Gruß,
              Dennis

              Kommentar


              • #8
                Die gibt es, muß man aber selbst implementieren.
                Bevor du dich da ranmachst, versuch doch erstmal, die Lebenszeit der Session zu verlängern.

                Kommentar


                • #9
                  Hallo,

                  also mit
                  session_set_cookie_params(31536000)
                  hat es schon mal nicht geklappt.
                  Hatte mich eingeloggt und den Browser einfach mal 45 Minuten sich selbst überlassen. Jetzt ist die Session schon abgelaufen.

                  Dann werde ich mir mal ini_set() anschauen.

                  Gruß,
                  Dennis

                  Edit: Wäre das dann so korrekt:

                  ini_set('session.cookie_lifetime','10800');

                  ?
                  Zuletzt geändert von Dennis79; 06.07.2006, 16:06.

                  Kommentar


                  • #10
                    Dann werde ich mir mal ini_set() anschauen.
                    wenn dies auch nicht klappt. setze nach erfolgreichem login ein echtes cookie. also kein session cookie.

                    dieses kannst du immer abprüfen, ob es existent ist. du musst allerdings dann auch in der datenbank die cookie-id (so nenne ich den inhalt des cookies mal) entsprechend ablegen. sonst hast du ja nichts zum vergleichen und zuordnen des users.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Hi,

                      da verstehe ich nicht so ganz, wie das gehen soll.

                      Erzeuge ich dann eine Session-ID, schreibe diese in einen "manuellen" Cookie und in die DB ?
                      Ist die Session dann nicht unbegrenzt gültig ?

                      Hab keine Idee, wie ich das angehen soll.
                      Schreibt man dann ein Datum mit dazu und die Session-ID ist z.B. für einen Tag gültig ?

                      Könnte das mal jemand erklären ?

                      Parallel läuft grade der Test mit
                      ini_set('session.cookie_lifetime','10800');

                      Vielleicht habe ich auch hiermit
                      session_set_cookie_params(31536000)
                      schon einen Fehler gemacht, weil ich das nur beim Überprüfen der Logindaten gesagt habe, aber wahrscheinlich müsste ich das ebenfalls (wie bei ini_set) vor jedem session_start machen ?

                      Gruß,
                      Dennis

                      Kommentar


                      • #12
                        Weder session.gc-maxlifetime noch session_set_cookie_params() alleine reichen da (idR.) aus.

                        Der Garbage Collector kann auch von anderen Scripten, die Sessions nutzen, getriggert werden - und dann räumt der im Session-temp-Verzeichnis auf, und gibt einen feuchten darum, ob in irgendwelchen anderen Verzeichnissen oder Scripten zur Laufzeit die genannten Angaben gemacht wurden.

                        Wenn schon, dann muss also auch das Session-temp-Verzeichnis für diese Scripte geändert werden.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          ... siehe Link aus erster Antwort.

                          Kommentar


                          • #14
                            Hallo,

                            also der zweite Anlauf ist auch fehlgeschlagen.
                            Dann werde ich mich mal mit session_save_path() auseinandersetzen (müssen), aber ich hab keine Ahnung wie das gehen soll.
                            Allein schon die Pfadangabe. Was weiß ich, wo mein Anbieter Sessions speichert...

                            Ich steige morgen wieder ein.
                            Vielleicht hat noch jemand was anfängerfreundliches parat ?
                            Vielleicht sollte ich mich auch einfach mal an den Anbieter wenden ?

                            Gruß,
                            Dennis

                            Kommentar


                            • #15
                              es geht nicht darum wo dein anbieter die daten speichert. es geht darum, dass du dir einen path in deinem webspace dafür definierst, damit die sessions nicht im globalen temp-verzeichnis des servers liegen.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X