Aktive Sessions zählen

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

  • Aktive Sessions zählen

    Folgendes Problem. Ich möchte gerne die aktiven Sessions meiner Seite zählen, um die eingeloggten Benutzer anzuzeigen. Habe den anderen Beitrag zu dem Thema schon gelesen und habe folgende Frage:

    Momentan trage ich den eingeloggten Benutzer in einer DB ein und zähle die eingeloggten Benutzer anhand der Einträge. Problem: Loggt sich jemand nicht richtig aus, dann wird er nicht aus der DB ausgetragen und mein Count ist fehlerhaft. Kann ich mit "session_set_save_handler " erreichen, dass bei der Zerstörung der Session ein entsprechende sql_query vorgenommen wird, ohne die gesamte Verwaltung der Sessions übernehmen zu müssen? Gibt es noch eine andere Möglichkeit bei der automatischen Zerstörung der Session eine Routine aufzurufen, die meine DB aktualisiert?

  • #2
    bau doch eine Bedingung ein, die prüft welche sessions seit Zeit X inaktiv sind und lösch die dann halt.
    mfg
    marc75

    <Platz für anderes>

    Kommentar


    • #3
      Wie meinst Du das?
      Gibt es eine Funktion, mit der man besagte Zeitspanne für jede Session abrufen kann, oder soll jede Session immer einen Eintrag vornehmen, wenn eine Seite aufgerufen wird?

      Kommentar


      • #4
        Original geschrieben von newsqler
        Wie meinst Du das?
        Gibt es eine Funktion, mit der man besagte Zeitspanne für jede Session abrufen kann,


        wüsste jetzt keine,


        oder soll jede Session immer einen Eintrag vornehmen, wenn eine Seite aufgerufen wird?
        ja zum Beispiel,
        mfg
        marc75

        <Platz für anderes>

        Kommentar


        • #5
          Eine schöne Lösung ist das meiner Meinung nach nicht. Zum einen habe ich dann indirekt doch meine eigene Session-Veraltung aufgemacht und außerdem ist das dann ein Zugriff mehr auf die DB pro Seitenaufruf.
          Die Session wird so weit ich weiß, definitiv beim Schliessen des IE zerstört, mit dem man die Session begonnen hat. Daher würde ich für die Lösung des Problems gerne noch "näher" an die Session.
          Zuletzt geändert von newsqler; 10.05.2004, 12:52.

          Kommentar


          • #6
            Original geschrieben von newsqler
            Die Session wird so weit ich weiß, definitiv beim Schliessen des IE zerstört, mit dem man die Session begonnen hat.

            falsch, das wird sie nicht.

            Teste es doch mal, speicher dir die Sessionuri mal ab und rufe die in einem neuen Browserfenster auf.
            mfg
            marc75

            <Platz für anderes>

            Kommentar


            • #7
              achja

              und dann werd dir mal bewusst was Clientseitig und Serverseitig ist. Woher soll php denn merken ob der Browser zu ist oder nicht.
              mfg
              marc75

              <Platz für anderes>

              Kommentar


              • #8
                du könntest die zeit beim login mit der session_id() speichern und ein limit festsetzen, wann die session automatisch beendet werden soll (1-3 h).
                dann ist der count zwar auch nicht 100%ig akkurat, aber du kommst der sache immerhin etwas näher.
                so vermeidest du außerdem, das accounts, die in internet-cafes o.ä. nicht geschlossen wurden mißbraucht werden.
                wenn man ein problem nicht lösen kann, dann muß man es eben umgehen!

                Kommentar


                • #9
                  Gut, gut, gut. Ich werde mir untertänigst dessen bewußt, was Du mir mit Deinen beiden letzten, sehr konstruktiven Beiträgen mitgeteilt hast.

                  Du hast natürlich Recht mit Deinen beiden Seiten, und die Session wird, wenn konfiguriert, per "timeout", später gelöscht.

                  Ich glaube, dass ich inzwische das mit den session_save_handlern verstehe. Bleibt die Frage, ob es möglich ist nur bestimmte Funktionien der Session_Save_handlers zu ersetzen, so dass man die übrigen Funktionen erhalten kann.

                  Kommentar


                  • #10
                    Mit session_save_handler kannst du nur alle session funtionen übernehmen, nicht einzelne.
                    Aber das ist ja auch nicht weiter schlimm, denn hier gibts ein fast fertiges session handling.
                    Fehlt nurnoch der garbage collector (der, der die sessions löscht). Aber den wolltest du ja eh ändern.
                    Mal ein Bespiel dafür:
                    PHP-Code:
                    function gc ($maxlifetime) {
                        
                    $standart_session_dir='dein/eigenes/sessionverzeichnis';
                        
                    $handle=opendir($standart_session_dir); 
                        while (
                    $file readdir ($handle)) { 
                            if (
                    $file != "." && $file != ".." && substr($file,0,5)=='sess_') { 
                                
                    $sess_file $standart_session_dir.$file;
                                
                    $last_modify=@filemtime($sess_file);
                                if (
                    $last_modify+$maxlifetime<=time()){
                                    if (
                    doMysqlConnect() AND $fp = @fopen($sess_file"r")){
                                        
                    // Session auslesen und in ein Array einlesen
                                        
                    $strSession=fread($fp,filesize($sess_file));
                                        
                    $arrSession=explode('|',$data);
                                        for(
                    $i=0;$i<sizeof($arrData);$i++){
                                        
                    $arrSession[$i]=unserialize($arrSession[$i]); 
                                        }
                                        
                    mysql_query("Deine Query");
                                        @
                    unlink($sess_file);
                                    }
                                }
                            }
                        }
                      
                    closedir($handle); 
                      return 
                    true;
                    }
                    function 
                    doMysqlConnect(){
                        if(!
                    $verbindung=@mysql_connect($server,$user,$pass)) return false;
                        if(!@
                    mysql_select_db($db,$verbindung)) return false;
                        return 
                    true;

                    ohne garantie

                    Kommentar


                    • #11
                      Vielen Dank, werde den Code mal ausprobieren.

                      Kommentar


                      • #12
                        Habe den Code eingebaut und ein kleines Problem mit der folgenden Zeile gehabt, das dazu führte, dass die Änderungszeit nicht festgestellt werden konnte:
                        $sess_file = $standard_session_dir.$file;
                        Könnte man so lösen:
                        $sess_file = $standard_session_dir[COLOR=red]."/".[/COLOR]$file;
                        Ist bei mir aufgetreten, als ich einfach den Standard-Pfad in standard_session_dir gespeichert habe. Werde weiter testen, nochmal bedankt.

                        Kommentar

                        Lädt...
                        X