Egentligen skulle inte jag lägga mig i den här tråden då jag inte kan få något som helst sammanhang över vad som diskuteras i tråden. Men jag gör ändå ett försök och låtsas att jag bara läst sista inlägget.
Förutsättning.
Användaren har loggat in, och sessionsvariabeln $_SESSION['sess_id'] som är satt med id från medlemstabellen, som vi t.ex kan kalla för 'users'.
I tabellen users finns fältet 'active' som är av formatet TIMESTAMP eller DATETIME.
'active' sätts till aktuell tid vid inloggning.
I tabellen finns också fältet 'online'. Vi kan låta det vara av format INT.
'online' sätts till 1 vid inloggning.
För en standardinställning i PHP så är en sessions livslängd 24 minuter av inaktivitet (detta går att ändra i php.ini). Sessionscookien dör också när webbläsaren stängs. Så det första man har att göra är att kolla om sessionen fortfarande är igång. Det kan man t.ex göra med:
<?php // Överst på sidan
session_start();
// Om sessionen inte finns skicka till login
if (!isset($_SESSION['sess_id'])) {
header("Location: login.php");
exit;
}
Nästa sak är att sätta alla som har varit inaktiva mer än 600 sekunder till offline (online=0) i tabellen 'users'.
$sql = "UPDATE users SET online=0 WHERE active<DATE_SUB(now(), INTERVAL 600 SECOND) AND online=1";
mysql_query($sql);
Sedan uppdaterar vi besökaren tid med
$sql = "UPDATE users SET active=now(), online=1 WHERE id={$_SESSION['sess_id']}";
mysql_query($sql);
Detta är det sätt jag skulle arbetat på.
Vill du dessutom ha att din besökare ska tvingas logga in igen om han inte varit aktiv de senaste 600 sekunderna så kan du lägga till följande mellan dina andra sql-satser:
$sql = "SELECT online FROM users WHERE id={$_SESSION['sess_id']}";
$result = mysql_query($sql);
if (mysql_result($result, 0) == 0) {
session_unset();
session_destroy();
header("Location: login.php");
exit;
}
Jag har inte testat detta men det borde fungera.