Logout oder Fenster schliessen

Danke erstmal

Gibt es auch eine Möglichkeit den Query

PHP:
<?php
$online_time = 30; //Anzeige wielang ein Useronline ist für 30Sekunden
$time = time();
$min_time = ($time)-($online_time);

$last_time = mysql_query("SELECT * FROM mitglieder WHERE lastaction='".$min_time."'") or die(mysql_error()); //USERID ist die Userid
	while($row = mysql_fetch_array($last_time)) {
	
		$lastaction = $row['lastaction'];
		
		if($lastaction > $min_time) {
			mysql_query("UPDATE mitglieder SET lastaction='".$time."' WHERE userid='".$userid."'");
		} else {
			mysql_query("UPDATE mitglieder SET usersess='NULL', online='0', lastlogin='".$time."', sesstime='0'");
		}
	}
?>

zu Refreshen?

Zum beispiel das er alle 35sekunden abfragt statt 30sekunden? Da ja die 30sekunden für den ablauf des onlines bestimmt ist!

EDIT:

Irgendwie t das nicht so wie es sollte

Ich hatte es mir so gedacht das wenn jemand die Seite Aktualisiert beispiel nach 5min das er dann ausgeloggt ist, wenn der User aber nun das Fenster schliesst steht er ja immer noch als eingeloggt da
 
Zuletzt bearbeitet:
Hallo

es ist doch nicht sicher, ob der User überhaupt das Fenster schließt. Viell. geht er auch für 2 Std. in die Mittagspause und ist weiterhin bei Dir online, tut aber nix auf der Seite. Dann kann es sein, dass er eine neue Adresse eintippt und damit weg ist etc. Du musst einfach mit Karenzwerten arbeiten. Wirklich sicher kannst Du nur sein, wenn er die Session löscht.

Ich wollte nicht kontrolliert werden, wann ich mein Fenster schließe und was ich sonstwo noch mache.

Hier ein Bespielscript, (ich glaube, das ist sogar mal hier im Forum gepostet worden, bin mir aber nicht ganz sicher), da werden diejenigen User herausgelöscht, die 1 Minute lang untätig waren. Innerhalb dieser Minute wird ein Update auf die Zeit gesetzt, ansonsten ein Insert eines neuen Datensatzes. Ist der Intervall von 1 Minute verstrichen, geht man davon aus, das der User weg ist und sein Datensatz wird gelöscht.

Dies ist nur ein Beispiel, wie ich es machen würde.
Andere Beispiele sind ja hier schon gepostet worden.

PHP:
<?php
session_start();
$server = "localhost"; 
$user = "root"; 
$pass = "passwort";
$database = "db";
$tab = "online";

$verbindung = @mysql_connect($server,$user,$pass)
    or die ("Keine Verbindung möglich");
    mysql_select_db($database, $verbindung)
    or die ("SQL-Fehler = ".mysql_error());
    
// Abfrage ob User registriert

$username = "";

if (isset($_SESSION["user"])){ 
        $username = $_SESSION["user"];
    }

// Variable anlegen, welche die IP zurückliefert (optional)
$ip = $_SERVER['REMOTE_ADDR'];

// löschen der entsprechenden Datensätze bei jedem Klick
// wenn der gespeicherte Zeitpunkt kleiner ist als der aktuelle Zeitpunkt minus 1 Minute

mysql_query("DELETE FROM
                $tab
            WHERE
                DATE_SUB(NOW(), INTERVAL 1 MINUTE) > Datum");

// auslesen, ob die angeforderte IP schon eingetragen ist

$wer_drin = "SELECT COUNT(*) as anzahl FROM online WHERE IP='$ip'";
list($ist_drin) = mysql_fetch_row(mysql_query($wer_drin));
if($ist_drin > 0) {

    // IP steht bereits in DB
    mysql_query("UPDATE $tab SET Datum = NOW() WHERE IP ='$ip'");
    } else {
     // ansonsten meuer Eintrag
            mysql_query ("INSERT INTO $tab
                        (IP, Datum, name)
                    VALUES
                        ('$ip', NOW(),'$username')");
    }
// anzeigen, wieviele User zur Zeit online sind
$wieviele = "SELECT COUNT(*) FROM $tab";
list($soviele) = mysql_fetch_row(mysql_query($wieviele));

echo "Zur Zeit online: ".$soviele."<br>";

// Auflistung der registrieren User. Hier filtere ich einfach die Namen raus. 
// Die nichtregistrieren User haben keinen Namen-Eintrag.

$sql = "SELECT name from $tab where length(name)>0";
  $rs = mysql_query($sql);
  $row = mysql_fetch_array($rs);
  $total = mysql_num_rows($rs);
  if($total == 0){
  echo "Zur Zeit keine registrierten User vorhanden!";
  } else {
        echo  "Zur Zeit registrierte User: ";
    do {
      echo $row[0]." ";
       }
       while ($row=mysql_fetch_array($rs));
  }
mysql_free_result($rs);
mysql_close($verbindung);
?>
 
Zuletzt bearbeitet:
Danke für die Prompte Antowrt

Hab das wie folgt gelöst:

PHP:
<?php
//Ausgeloggt nach Zeit
$USER_ON_TIME = 5*60; // Zeit für Inaktivität (300Sekunden) 5Minuten
$min_time = time()-$USER_ON_TIME;

$sql_log = mysql_query("SELECT * FROM mitglieder WHERE usersess='".$_REQUEST['sid']."'");
	while($row = mysql_fetch_array($sql_log)) {
	
		if($row['lastaction'] < $min_time) {
			mysql_query("UPDATE mitglieder SET usersess='NULL', online='0', lastlogin='".time()."', sesstime='0' WHERE lastaction < '".$min_time."'");
		} else {
			mysql_query("UPDATE mitglieder SET lastaction='".time()."' WHERE usersess='".$_REQUEST['sid']."'");
		}
	
	}
?>

Doch nun ist noch das Problem wenn der User sein Fenster schliesst dann ist er ja immer noch als Eingeloggter User verzeichnet!

Gibt es da eine Lösung um dieses Problem zu beseitigen?
Oder muss ich dann so hin nehmen?

Den ich hätte es gern das nach den 5min egal ob der User sein Fenster zu oder gar noch online ist aber nix macht, das er auf den Offline Status gesetzt wird, seine session gelöscht wird
 
Du kannst eigentlich auch im Hintergrund alle User abchecken lassen, also jeder der über der zeitspanne über ist bekommt seine session id gelöscht und im datenfeld "online" wird es auf 0 gesetzt bei allen dann sind die jenigen offline :) Würde eigentlich gehen ;)

MfG
KD3
 
Hmm.... hab ich allerding schon getestet nur dann gibt es das Problem selbst nach ablauf der zeit sind die die nicht drunter fallen damit betroffen!

Ich dachte so in der art das man eine art Cronjob aufsetzt dafür um alle 5min den Cronjop aufzurufen!

Es sollte aber wenn möglich gehen das man im ACP die zeit die man begrenzt in den Cronjop verweissen kann so das er beispiel: nicht 5 sondern 10 min refresht

Ich hoffe das es irgendwie eine möglichkeit gibt dies zu vereinfachen! ;)
 
Zurück