2011-11-05 122 views
-1

昨晚我發佈了一個問題,但不幸的是,我沒有足夠詳細的描述我發現自己的情況。我已經完成了一項家庭作業任務,我們要創建一個「評論」部分博客。但是,要讓用戶留下評論,他們必須輸入驗證碼。我們的任務是使用cookie來跟蹤登錄嘗試。PHP cookie和時間問題

我沒有在我原來的qestion正確的解釋是:

我們必須使用cookies。這是一個專門針對cookie實施的練習。這不是最佳實踐,是脆弱的。我們的導師解釋了爲什麼我們不應該在「真實世界」的情況下做到這一點,但他希望我們瞭解和展示cookies的使用。

昨天晚上我發佈了一個問題,但不幸的是,我沒有足夠詳細的描述我發現自己的情況。我已經完成了一項家庭作業任務,我們要爲博客創建一個「評論」部分。但是,要讓用戶留下評論,他們必須輸入驗證碼。我們的任務是使用cookie來跟蹤登錄嘗試。

我沒有在我原來的qestion正確的解釋是:

我們必須使用cookies。這是一個專門針對cookie實施的練習。這不是最佳實踐,是脆弱的。我們的導師解釋了爲什麼我們不應該在「真實世界」的情況下做到這一點,但他希望我們瞭解和展示cookies的使用。

我們需要爲用戶提供儘可能多的機會,因爲他們希望登錄。但是,如果他們在30秒內嘗試五次,他們會被鎖定三分鐘。

大多數人提到我應該使用會話,這是有道理的。但是,這是不允許的。

在高層次上,您只需存儲時間戳而不是「計數」。然後在每次請求時,您可以扔掉超過30秒的時間戳並計算其餘時間。

我們需要爲用戶提供儘可能多的機會,因爲他們希望登錄。但是,如果他們在30秒內嘗試五次,他們會被鎖定三分鐘。

大多數人提到我應該使用會話,這是有道理的。但是,這是不允許的。一位用戶提到,我所需要做的就是存儲時間戳,而不是「計數」,然後丟棄超過30秒的時間戳,並計算剩餘時間。這是有道理的,但你如何實現這個目標?

這是一個家庭作業問題,我當然不希望代碼。我只是想澄清一下整個'餅乾事情'。我應該將時間戳存儲在數組中嗎?如果是這樣,你如何做到這一點?如果時間超過30秒,我該如何將它們從陣列中刪除?

我覺得我有點缺乏一般的cookies的理解。任何澄清將不勝感激。我希望我一直在簡潔,不浪費任何寶貴的時間。謝謝。

回答

1

我的建議是,如果你必須使用cookie,你可以簡單地設置單獨的餅乾爲標誌的失敗嘗試用過期30秒的時間,而如果所有4失敗的嘗試標誌時,他們再次失敗,置另一標誌cookie在3分鐘後過期,並且在設置該標誌時不允許任何嘗試。

+0

對不起,新手跟進.....你需要每次分配一個新的cookie嗎?和setcookie(「firstcookie」)一樣,檢查它是否被設置,如果是,setcookie(「secondcookie」)等,直到設置了四個? – mrwienerdog

+0

這可能是最簡單的方法,這樣每次嘗試都有自己的超時時間。邏輯應該遵循如下內容:如果沒有設置完整的鎖定cookie並且嘗試失敗,請檢查請求中的標誌1,如果未設置它,如果已設置,則移動到標誌2並重複檢查/設置等上。 –

+0

我還沒有足夠的積分upvote,但謝謝。總體感覺。我想我被掛斷了,因爲我的教練說他只用了3個餅乾。我從來沒有想過這樣。很棒! –