2015-01-20 50 views
0

我有一個網站正在創建,我希望能夠看到誰在線和誰不在。查看誰在線並不困難,當您登錄時,數據庫中的「在線」字段將從0更改爲1。但問題在於脫機。我沒做到這一點IF人註銷的註銷按鈕,然後被轉到頁logout.php:關閉瀏覽器更新數據庫關閉

<?php 
session_start(); 
$user_check=$_SESSION['login_user']; 

if(session_destroy()) 
{ 
$connection = mysql_connect("localhost", "root", ""); 
$db = mysql_select_db("masterrad", $connection); 

$query2 = mysql_query("update users set online = '0' where username = '$user_check'", $connection); 

header("Location: index.php"); 
} 
?> 

但如果他只是關閉網頁什麼都不會更改數據庫中的,因爲他從來沒有去到logout.php頁面。

所以我想知道是否有更好的方法來做到這一點?

+1

會話將自動刪除自己,具體取決於您如何設置服務器的會話壽命。更新,那是另一個麻線球。谷歌「如果瀏覽器關閉,更新數據庫」。你會發現很多結果。 – 2015-01-20 22:02:39

+0

這是一個可怕的想法,但是你可以有一個「心跳」系統,每隔x分鐘發送一次ajax請求。如果您沒有收到答案,請將其標記爲離線。 – 2015-01-20 22:03:04

+0

是的,「心跳」__是一個可怕的想法。 – Kleskowy 2015-01-20 22:06:49

回答

2

在您認爲是「在線」頁面的每個頁面上。
您可以使用@Alec Deitloffs'last_time_spotted'字段的想法,並基於該字段和您的時間段更新在線標誌。沒有克倫需要。

$query2 = mysql_query("update users set `online` = '0' where `online` = '1' AND (`last_time_spotted` < NOW() - INTERVAL 15 MINUTE), $connection); 
+0

這就是我想要的,好工作先生! – zmuci 2015-01-21 00:17:26

0

我相信大多數網站執行此操作的方式是在數據庫中有一個「最後一次發現」字段。每次用戶轉到新頁面時,該字段都將更新爲當前時間。一個cron作業每10,15分鐘執行一次(無論你想要什麼),如果當前時間減去最後發現用戶的時間大於你想要的閾值(即7分鐘不活動),那麼你會考慮它們離線。

當用戶離開頁面,關閉瀏覽器等等時,實際上讓代碼完全成功執行非常非常困難。不幸的是,這意味着需要採取其他方法,而且我的理解是這是最受歡迎的選擇。或者至少,其中一個更簡單的實施。

+0

我正在使用Windows,併爲我所看到的Cron是Linux?還是我完全錯過了這個觀點? – zmuci 2015-01-20 22:20:55

+0

[這個問題](http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron)討論了建立定時/重複操作的替代方案。基本上,你只是想在服務器上建立一些東西來運行每個X單位的時間,以執行「不活躍用戶」的數據庫掃描並將它們轉換爲「離開的用戶」。 – 2015-01-20 22:23:37