Login_Tut: Was ist wenn Session nicht autom. beendet wird?

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

  • Login_Tut: Was ist wenn Session nicht autom. beendet wird?

    Hallo!
    Das Tut hat mir sehr geholfen, jedoch ist mir noch nicht ganz klar, was passiert wenn der User sich nicht explizit auslogt?

    Bleibt die Session_id in der DB?
    Hat das Auswirkungen auf nachfolgende Log-ins?

    Kann man nicht eine Zwangsabmeldung realisieren?

    Gruss Porter!

  • #2
    > was passiert wenn der User sich nicht explizit auslogt?

    nichts.

    > Bleibt die Session_id in der DB?

    ja

    > Hat das Auswirkungen auf nachfolgende Log-ins?

    nein.

    > Kann man nicht eine Zwangsabmeldung realisieren?

    nein.


    die gefahr ist nur, dass es im gleichen brwoserfenster für nachfolgende user (z.b. inetcafe) die möglichkeit vorhanden ist, ebenfalls in die securearea zu kommen.

    aber nach 10 min nichtstun wird der user eh nciht mehr angenommen.
    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


    • #3
      Original geschrieben von Abraxax
      > Bleibt die Session_id in der DB?

      ja
      Nein, bleibst sie nicht ... PHP führt regelmäßig (mit einer Wahrscheinlichkeit von session.gc_probability Prozent) eine Garbage Collection durch, bei der alle Session-Daten, die älter als session.gc_maxlifetime Sekunden sind, gelöscht werden.

      (session.gc_probability und session.gc_maxlifetime sind Konfigurations Parameter ... )
      Original geschrieben von Abraxax
      aber nach 10 min nichtstun wird der user eh nciht mehr angenommen.
      eben aus oben genanntem Grunde ... und nicht 10 Minuten ... sondern 1440 Sekunden sind der Standardwert.
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        @Goth
        es geht um das tut von happy. und die angaben, die ich gemacht haben, beziehen sich ausschliesslich darauf.

        DB? klar bleiben die dort drin, weil kein UPDATE auf das feld gemacht wird, wenn ncihts passiert.

        10 min: wenn kein UPDATE gemacht wird, bleibt die letzte aktive zeit in der DB. ist diese älter als 10 min, wird der user eben nicht mehr aktzeptiert.
        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


        • #5
          Ok ok, danke erst mal für die Antworten!

          Also bleibt keine Möglichkeit zu erkennen, ob der angemeldetete User die Seite verlässt oder das Browserfenster schliesst...?

          Schade auch! Aber wenn es eh keine Auswirkungen hat (abgesehen davon, dass in der DB die Session-Id weiter Speicherplatz verbraucht)
          soll mir das erst mal reichen!

          Nochmals Danke

          Gruss Porter!

          Kommentar


          • #6
            So, und nu kommt der Imi mal wieder daher und muß die Sache natürlich wieder verkomplizieren, denn der Imi hat mit Hilfe desLogin Scriptes, welches mitlerweile astrein funktioniert , auch gleich ein "Diese registrierten User sind online" Script gebastelt das eben auf diesem Session Eintrag beruht. Das Problem ist jetzt nur das wenn der User ohne Logut die Seite verlässt, er noch Jahre später online gezeigt wird, oder anders ausgedrückt für solange bis er endlich den logut knopf findet. Die Frage die sich nun stellt ist, wie finde ich heraus welcher User eine abgelaufene Session hat und wie krieg ich die dann wieder auf NULL?

            Kommentar


            • #7
              Bei jedem Seiten aufruf die Sessions auswählen, die nicht NULL sind.
              Das sollte reichen, um die aktiven User rauszukriegen.

              Wenn ich das richtig verstanden habe wird die Session nach 10 min. Nichtstun ja sowieso gelöscht, d.h. NULL gesetzt.
              it's not a bug,
              it's a feature!

              Kommentar


              • #8
                nun kommen wir zum punkt Zusatzspalten (Kür)

                du erweiterst die tabelle um eine neue spalte vom type datetime und nennst sie lastaction

                bastel dir ne neue funktion logout_idle()

                in dieser funktion setzt du als allererstes mit UPDATE die spalte UserSession auf NULL, wo lastaction weiter als eine von dir definierte zeitspanne zurückliegt

                danach setzt die den wert der spalte lastaction auf NOW() und zwar da, wo in der spalte UserSession die akteuielle session-id drinsteht

                in der funktion logged_in() rufst du vor dem momentan stehenden code die funktion logout_idle auf

                @XGremlin
                nicht im tut
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Also das ganze sieht bei mir jetzt so aus:

                  PHP-Code:
                  function logout_idle()
                  {
                    
                  $noaction=time()-600;
                    
                  $sql="UPDATE gog_mitglieder SET UserSession='NULL' WHERE lastaction=".$noaction;
                    
                  mysql_query($sql);
                    
                  $sql="UPDATE gog_mitglieder SET UserSession='".session_id()."' WHERE lastaction=".NOW();
                    
                  mysql_query($sql);
                  }
                  function 
                  logged_in()
                  {
                      
                  logout_idle();
                      
                  $sql="SELECT UserId FROM gog_mitglieder WHERE UserSession='".session_id()."' LIMIT 1";
                      
                  $resultmysql_query($sql);
                      return ( 
                  mysql_num_rows($result)==1);

                  allerdings sit da wohl noch n Fehler drinn, denn meine seite wird nurnoch halb angezeigt...

                  Kommentar


                  • #10
                    lies dir meine antwort nochmal durch

                    wenn du die spalte als datetime gemacht hast, wird das so nicht funktionieren

                    außerdem hab ich geschrieben dass du lastaction auf NOW() setzen sollst,wo usersession den wert von session_id() hat und nicht, dass du usersession in der zeile ändern sollst, wo in lastaction now() steht...
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      ok, habs geändert, hab das beim lesen und ausführen wohl irgendwie verdreht. Aber jetzt steh ich vo dem Problem, wie bestimme ich denn den Wert für die abgelaufene Zeit, weil mit NOW() kenne ich mich gar nicht aus. Wie ziehe ich davon denn den Wert ab um für DATETIME ein korrktes ergebnis zu erhalten?

                      Kommentar


                      • #12
                        guckst du hier: http://www.mysql.com/doc/de/Date_and...functions.html

                        INTERVAL is eine gute idee
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Also ich muß dir ganz ehrlich sagen das ich daraus kein bischen schlau werd, und hoffe du regst dich jetzt nicht zu sehr auf, ich weiß das ich nervig sein kann.

                          Ich hab das jetzt mal mit time() versucht, und das klappt auch vom Prinzip her, nur kann ich mcih jetzt nicht mehr einloggen und der zeigt alles registrierten User als online an....

                          Kommentar


                          • #14
                            setz usersession auf NULL wo lastaction < NOW() - INTERVAL 5 MINUTE
                            dann sind user nach 5 minuten inaktivität ausgeloggt
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              ok, das ist mir jetzt peinlich das ich das vorher nicht gechecked hab, jetzt wo ich das seh ists mir klar *duck*

                              Kommentar

                              Lädt...
                              X