2011-12-29 52 views
1

我有一個網站,有幾個請求選項(例如添加照片,添加評論)。我想限制每個特定時間使用的要求,例如,他不能在小時內發佈超過5條評論,他不能每小時添加超過5張照片等。如何限制每小時用戶的意見/請求在php

我的想法是讓/更新會話變量每次發送表單操作時,所以它總計爲5(如果會話var == 5它會拒絕每個表單上的操作)。我的想法在我看來很好,但我只是找不到從初始化開始重置某個會話變量1小時的方法)。期待任何想法

回答

3

使用簡單的SQL命令,你可以得到在過去一小時內完成的項目數,因此沒有必要使用會話變量做它從SQL

檢查(如果用戶重新設置的會話將死)在當前小時

SELECT 
    COUNT(*) 
FROM 
    my_elements_table 
WHERE 
    HOUR(createdon) = HOUR(NOW()) 
    AND DATE(createdon) = CURDATE() 
    AND createdby = the_user_you_are_checking 

檢查「上崗」的在過去一小時

0特定元素的數量「上崗」特定元素的數

很明顯,根據您的數據庫字段和表格調整SQL,但您應該有一個很好的起點。

0

在包含操作時間的會話中以及每次用戶試圖發佈檢查時首先查看5個變量是否記錄了某些內容以及是否全部都有數據檢查時間記錄。如果所有時間都在距離當前時間一小時內,則拒絕訪問。

+0

有點像我在Krister Andersson的帖子中說的,由於自動攻擊,你不能使用任何基於cookie的東西。他們不會關心你的會話機制,他們可以重新登錄,發佈,拋棄會話cookie並重新開始。如果用戶希望存儲許多圖片並發現他可以註銷並重新登錄,那麼對於用戶來說也是如此。 – 2011-12-29 15:24:37

1

我想你會在數據庫中存儲關於評論和照片的數據,至少你必須對評論做些什麼,但我想你也是爲照片做的。在這種情況下,我會保存創建評論/照片的時間戳以及創建它的用戶的ID以及其他信息。

當用戶嘗試添加其他照片或評論時,您可以統計該特定用戶在最近60分鐘內創建的評論和照片數量。如果超過五個,則放棄該請求,否則添加該信息。

1

那麼如果你有用戶,你把它們存儲在數據庫中,不是嗎?那麼爲什麼不直接存儲他們上次在數據庫中評論過的東西,並用它來檢查他們是否可以評論?

+0

這是個好主意 – Malyo 2011-12-29 15:57:08

+0

但是,如果你只存儲他們最後一次做的事情,你怎麼知道他們是否在過去一小時內做了五次? – 2011-12-29 16:01:20

0

另一種解決方案是查詢數據庫以返回在指定時間範圍內發佈的評論,如果結果數量高於允許的數量,則不允許發表新評論。

是這樣的:「選擇created_on FROM tblComments其中USER_ID = X

有了這個,我想提出,你是存儲在數據庫中註釋的假設,你必須包含後時間的字段。