2010-04-21 108 views
3

我一直在閱讀關於在PHP中創建投票系統,最大限度地減少來自同一用戶的濫用/多個投票的stackoverflow,但我還沒有遇到我的問題的答案。帶有會話的PHP投票系統?

我有一個應用程序,用戶不需要註冊投票或「喜歡」一個條目。很顯然,我想盡量減少濫用,並且我不想限制每個IP地址的投票數,因爲有些組織(包括我的)使用共享IP地址。

我從來沒有在未經過身份驗證的系統中使用會話,但由於此應用程序是圍繞入場票(純粹用於娛樂價值,但我仍想盡量減少濫用)爲中心,我想知道這種方法將工作和是否有任何缺點,如性能影響,以及是否它甚至有可能以這種方式來使用會話:

  • 開始當網站加載會話
  • 允許每個會話
  • 每個項目的一票

如果這是一個壞主意,我的備選方案是允許每個IP地址的合理數量的投票(比如25),或者在來自同一IP地址的投票之間放置一個時間限制。

你們推薦什麼/你認爲最令人討厭的用戶是什麼?重新啓動瀏覽器,等候5分鐘或清除cookie?

+0

我建議不要將結果用於娛樂價值以外的任何其他用途。 – gnud 2010-04-21 08:44:59

回答

1

只有會話是個壞主意,因爲如果關閉瀏覽器並再次來,您將能夠投票。你可以使用會話作爲「幫助」。最好的選擇是使用IP限制。你也可以使用cookies,但它又是一個「助手」,因爲你可以從瀏覽器中清除cookie。 我建議你使用ip限制,就像你說的,一個ip可以投票25次,並使用cookie來限制計算機不止一次投票。因此,如果用戶想要多次投票,他可以刪除一個cookie,但他將無法投票超過25次。

5

實在是沒有辦法讓無需用戶認證的「嚴肅」的投票系統,其他所有選項都有缺陷:

  • 會議結束的時候,你關閉瀏覽器,所以才重新打開它,找你新鮮
  • 餅乾是你最好的射門,但它們可以被清除或甚至拒絕
  • IP地址是不可靠的和/或不適用
+0

當瀏覽器關閉時,會話不會自動結束。您可以創建持續一生的會話(或至少在cookie被刪除之前)。在這方面,他們等於您的選項#2,因爲會話是使用cookie實現的。 – deceze 2010-04-21 09:05:07

+0

按照默認行爲,瀏覽器關閉時do自動結束。你可以改變它,但是你有和cookie一樣的問題。會話也可以不用cookies。 – 2010-04-21 11:36:27

1

我肯普認爲,餅乾是最好的選擇。此外,會話也使用cookies--不同之處在於會話cookie在瀏覽器關閉時被刪除,「簡單」cookie在到期時被刪除,在這種情況下「更好」。

如果談論IP地址,用戶可以使用代理繞過「IP過濾」。

當投票結束時,有人可能會通過結果查看是否有任何可疑(如5分鐘內來自單一IP的100票) - 這將有助於獲得更真實的結果。

+1

當瀏覽器關閉時,爲什麼每個人都說會話結束?這是無稽之談。這取決於使用的會話/ cookie的類型。 – deceze 2010-04-21 09:06:24

+0

好吧,我說這部分是因爲我關閉瀏覽器時清除了cookies,並鼓勵其他人也這樣做。 – gnud 2010-04-21 12:27:13

+1

deceze,這是因爲它*標準* PHP的行爲,當使用'session_start()' – binaryLV 2010-04-22 08:06:31

0

您可以同時使用cookie和apc/memcached等服務器緩存機制。將投票結果存儲在cookie中,並使用相同的密鑰/ cookie名稱存儲在apc緩存中,然後檢查兩者是否存在。如果cookie被刪除但apc鍵仍然存在,那麼您知道某人正在嘗試重新投票,並且您可以重置該cookie並增加apc緩存值的生存期。

這不是防彈的,但在沒有數據庫的情況下,我認爲這是一個很好的解決方案。請記住,如果服務器耗盡ram,它將刷新apc緩存。

+0

只是出於好奇,爲什麼投票呢? – 2012-01-04 11:16:34