Ankündigung

Einklappen
Keine Ankündigung bisher.

login system, logout timer

Einklappen

Neue Werbung 2019

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

  • login system, logout timer

    hallo,

    ich habe mir ein login system geschrieben, das die session id in einer mysql tabelle speichert. zum einen auch damit man feststellen kann ob jemand online ist oder nicht.
    wenn jemand sich wieder ausloggt, dann löscht der die sessionid wieder aus der tabelle und wird offline angezeigt. alles kein problem.

    ich will jetzt aber, das wenn jemand das browserfenster schließt ohne auf logout zu gehen oder wenn jemand eine bestimmte zeit nichts mehr macht, das sich der benutzer automatisch ausloggt, also die sessionid zerstört, und auch die session id aus der tabelle löscht.

    wie kann ich da anfangen ?


  • #2
    Indem Du bei jeder Aktion des Nutzers ein Feld im Datensatz mit der aktuellen Zeit füllst. Sessions, deren Zeitstempel kleiner Jetzt-(irgendein Intervall) sind, werden als offline angesehen.

    Kommentar


    • #3
      das kapier ich jetzt nicht also ich mach noch eine tabelle wo die zeit gespeichert wird und jedes mal wenn der benutzer eine seite öffnet erneuer ich diesen. aber wann weis mysql jetzt ist die zeit um jetzt lösch das mal?

      Kommentar


      • #4
        Nicht unbedingt eine neue Tabelle, einfach ein zusätzliches Feld. Nennen wir es zum Beispiel session_time (so heißt das entsprechende Feld bei phpBB).

        Löschen brauchst Du den Datensatz nicht unbedingt. Das kannst Du bei vielleicht jedem tausendsten Loginversuch machen oder so ähnlich. Du fragst für Deine "gerade online"-Anzeige einfach nur Datensätze ab, deren Zeitstempel größer (Jetzt-Intervall) ist.
        PHP-Code:
        $tlimit time() - 240// vier Minuten

        $sql "
          SELECT
            ...
          WHERE
            session_time > 
        $tlimit
        "

        Kommentar


        • #5
          so ich hab jetzt mir jetzt mal überlegt, wenn ich jedes mal wenn einer die startseite aufruft ein script abläuft
          das aus jedem benutzer die zeit von mysql holt wo er das letzte mal etwas gemacht hat und von allen die sag ich mal jetz länger als 5 minuten nichts mehr gemacht haben gelöscht werden. das würde funktionieren aber es würde sag ich mal ne menge resourcen kosten oder?

          Kommentar


          • #6
            So ist das nun Mal mit database-driven applications.
            "ne Menge resourcen" ist sehr relativ.

            edit: Als Faustregel (die aber eben nicht immer stimmt) kannst Du Dir merken:
            Lesen aus der Datenbank ist günstig, Schreiben teuer.
            Damit hat MySQL ja auch lange Zeit bei MyISAM geworben: Einfügen können wir nur so lala. Bei UPDATE liegen wir im Mittelfeld. Aber Lesen können wir wie der Blitz.

            Kommentar


            • #7
              danke für die hilfe

              Kommentar


              • #8
                Ich würde die session_id auch nicht unbedingt in die Tablle schreiben,lass das doch PHP machen. Ich habe mir das auch angewöhnt. Wenn mal viele User online sind wirst das merken.
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar


                • #9
                  Nur dass dann das "gerade online"-Feature etwas schwieriger zu realisieren ist

                  Kommentar


                  • #10
                    Nee David nicht wirklich,nur ein anderer Weg ist es.

                    Habe das bei meiner Seite die ich grad mache auch gemacht und es funzt.
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Weise uns den Weg

                      Kommentar


                      • #12
                        Nun ich mache das so.

                        Anstatt die session_id rein zu schreiben habe ich ein Feld online,was nur den Zustand 0 oder 1 annehmen kann. 0 = nicht eingeloggt, 1 = eingeloggt.

                        Beim erfolgreichen Login wird das Feld auf eins gesetzt und somit gilt der User als eingeloggt zusätzlich wird noch die Zeit beim login in die Datenbank geschrieben. In die Session schreibe ich die User id rein (anhand derer wird immer ein das Update gemacht und de rvergleich bzw. die Kontrolle gemacht) und einen Zeitstempel. Bei jedem Seitenaufruf (die Seiten die der User besuchen darf) wir die Zeit verglichen und ein Update gemacht. Wenn der Unterschied dann bei 6 min angelangt ist gilt er als inaktiv,nach 20 min nichts tun wird er authomatisch ausgeloggt. Einziges Problem ist aber nur wenn der Browser ohne Logout geschlossen wird,das hast aber auch wenn die session_id in der DB steht.

                        So mache ich das und es funktioniert.
                        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                        http://www.lit-web.de

                        Kommentar


                        • #13
                          Und wo ist dann jetzt der substantielle Unterschied?
                          Ob da nun die user_id oder die session_id drin steht, ist doch vom Prinzip her Jacke wie Hose.

                          Kommentar


                          • #14
                            Nunja ich hatt hier im Forum mal in einem Thema gelesen das,diese das auch mal gemacht haben die session_id in die DB geschrieben und es bei großen Andrang Probleme gab. Darum hatte ich das geändert. Glaube Flo1an hatte das damals geschrieben,ich weis aber nicht mehr in welchen Thema das war.

                            Nunja einen Unterschied macht es schon,wenn das DB-Design schlecht gemacht ist. Weil die id des Users ein eindeutiger Wert ist,der authomatisch als Index behandelt wird,schreibt man die session_id rein,dann sollte man,denke ich das Feld wenigstens mit einem FULLTEXT versehen. Ist Resourcen schonender würde ich behaupten.
                            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                            http://www.lit-web.de

                            Kommentar


                            • #15
                              Weil die id des Users ein eindeutiger Wert ist,der authomatisch als Index behandelt wird
                              Nein, automatisch als Index wird das nicht benutzt. Das musst Du bei der Tabellendefinition genauso angeben, wie Du das bei session_id auch der Fall ist. Und eindeutig muss die session_id auch sein, sonst funktioniert Dein ganzes Session-Management nicht.
                              FULLTEXT ist sicher einiges, aber nicht resourcen-schonend. Brauchst Du hier auch nicht.
                              Übrig bleibt dann nur noch, dass user_id vermutlich eine Zahl und session_id vermutlich eine Zeichenkette beim Vergleich ist. Mag einen Unterschied machen, aber keinen substantiellen.

                              Kommentar

                              Lädt...
                              X