Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Aktive Sessions zählen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Aktive Sessions zählen


 
newsqler
10-05-2004, 11:40 
 
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?

 
marc75
10-05-2004, 11:44 
 
bau doch eine Bedingung ein, die prüft welche sessions seit Zeit X inaktiv sind und lösch die dann halt.

 
newsqler
10-05-2004, 11:59 
 
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?

 
marc75
10-05-2004, 13:20 
 
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,

 
newsqler
10-05-2004, 13:50 
 
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.

 
marc75
10-05-2004, 14:37 
 
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.

 
marc75
10-05-2004, 14:38 
 
achja

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

 
Cannabeatfan
10-05-2004, 14:43 
 
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.

 
newsqler
10-05-2004, 14:48 
 
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.

 
oppi
10-05-2004, 15:53 
 
Mit session_save_handler kannst du nur alle session funtionen übernehmen, nicht einzelne.
Aber das ist ja auch nicht weiter schlimm, denn hier (http://www.php.net/manual/de/function.session-set-save-handler.php) 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:
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

 
newsqler
10-05-2004, 17:26 
 
Vielen Dank, werde den Code mal ausprobieren. :cool:

 
newsqler
12-05-2004, 15:32 
 
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."/".$file;
Ist bei mir aufgetreten, als ich einfach den Standard-Pfad in standard_session_dir gespeichert habe. Werde weiter testen, nochmal bedankt.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:57 Uhr.