2013-02-27 72 views
-2

我正在使用Javascript,PHP和mySQL編寫一個相當複雜的項目管理系統。所有用戶都存儲在mySQL表中,當他們登錄時,我在PHP中設置一個會話變量並記錄他們最後一次登錄。我這樣做只是爲了讓人們無法通過點擊F5來增加他們的訪問次數。我希望用戶看到當前登錄我的網站的其他人

我希望所有登錄的用戶都能夠看到當前登錄該網站的所有其他用戶的列表。

我可以看到解決這個問題的唯一方法是啓動一個PHP腳本(比如說每10秒鐘),它可以做2件事情。將當前用戶的當前時間記錄到mySQL表中,然後查看所有其他用戶的最後日誌時間。任何人的最後登錄時間少於說當前時間前20秒將顯示爲登錄。

我知道如何使用Javascript,Ajax等定時器做到這一切,但它只是在我看來,而不是完成我所需要的不完美的方式。

我的問題:

這是實現我想要的

它是良好的編程習慣頻繁發送Ajax調用和更新的MySQL數據庫作爲每10秒爲每個用戶的最佳方式。

+0

在這本優秀的書(使用PHP和MySQL的核心Web應用程序開發)中可以找到與我提議的登錄方案類似的登錄方案,它可以幫助我獲得很多幫助。 – idipous 2013-02-27 13:34:16

+0

謝謝你。剛剛檢查了亞馬遜書 - 看起來正是我所需要的。 – Kage 2013-02-27 16:40:12

+0

不確定爲什麼我的問題已關閉並標記。在我看來,我有2個不同的問題,並繼續我已經有答案的答覆 - 啊以及 – Kage 2013-02-27 16:40:56

回答

1

我建議你創建一個表格,說「loggedinusers」,其中包含有關當前登錄的用戶的信息。現在你肯定會使用javascipt,如果你想刷新頁面上的列表,並且必須用Ajax查詢定時器db來完成。

另一種解決方案是在頁面上有一個php模塊,當你導航到每個頁面時將會查詢數據庫。因此,您將獲得有關在用戶瀏覽您的網站時登錄的新用戶的信息。我猜這很合理。

性能不會從一張小表(僅有幾千條)中受到影響。

+0

「當您導航到每個頁面時查詢數據庫」 - 這是性能殺手 – bluszcz 2013-02-27 12:15:30

+0

假設是,這不是一個巨大的表數百萬登錄用戶。 – idipous 2013-02-27 12:19:38

+0

我的應用程序通過PHP來查詢很多數據庫,我曾考慮每次查詢數據庫時更新登錄列表。但理想情況下,我想要一個更準確的系統,以防萬一用戶登錄但沒有做任何查詢數據庫。它不僅僅是一個應用程序而是一個網站,所以它全部在一個頁面上,用JavaScript處理所有導航 – Kage 2013-02-27 12:22:49

1

那麼,這取決於體系結構。

如果此信息僅適用於您和一些額外用戶羣 - 您可以每1-2分鐘刷新Varnish/Apache/Nginx日誌(可以添加一些額外的日誌記錄以顯示Cookie等)並輸出它到靜態html頁面 - 這將提供憑據後可用。

它的做法有點不同 - 但不會影響平臺的性能。

+0

謝謝。將研究你的想法。如果我每10秒發送一次ajax調用並查詢數據庫,它是否是一個性能殺手?如果它完成異步,用戶甚至會注意到? – Kage 2013-02-27 12:20:20

+0

您的想法是否爲PHP中的每個用戶設置了獨特的會話cookie?如果是這樣,我如何檢索所有這些會話cookie? – Kage 2013-02-27 12:26:58

+0

更改日誌記錄配置。例如,您可以在varnishncsa中執行此操作: %{Cookie}我,例如,您有apache的例子: http://httpd.apache.org/docs/2.2/mod/mod_usertrack.html – bluszcz 2013-02-27 13:18:47

相關問題