2011-09-06 129 views
1

我有一個使用c#顯示Flash文件的老虎機應用程序。任何用戶都會來到現場並玩遊戲。但是我需要限制每天最多3次,這意味着他可以只打3次,如果他第四次打,那麼他會得到一條消息,表明他可以在第二天打。由於本網站沒有用戶登錄,我決定存儲cookie值。每次他進入網站時都會增加計數。然後,在每個page_load事件中,檢索cookie值,如果其值爲3,則顯示No Play Message。存儲和檢索C#中的cookie值

首先我會檢索頁面加載事件中的cookie的值。

string _counter = response.Cookies["slotmachinecookie"]["counter"]; 
    if (!IsPostBack) 
    { 
    if (_counter) = 3 
     //displayMessage 
     return; 
    else 
    { 
     HttpCookie cookie = new HttpCookie("slotmachinecookie"); 
     if (string.IsNullOrEmpty(_counter)) 
     cookie.Values.Add("1", "counter"); 
     else if (_counter == "1") 
     cookie.Values.Add("2", "counter") 
     else if (_counter == "2") 
     cookie.Values.Add("3", "counter"); 
    } 
} 

這項工作?我想我可以試試它,但只是想確定是否有更好的方法,而不是Cookie來做到這一點?提前致謝。

+0

'我想我可以試試它......'我認爲你正朝着正確的方向前進。 :) –

+0

呵呵,謝謝Paul。只是想知道是否有任何其他方式..謝謝!我會試試這個。 – Bladerunner

+5

不要忘記,一旦用戶發現自己通過cookies記錄了他們的使用情況,就可以清除cookies並繼續播放。 –

回答

1

根據我的意見,你的方法將工作,但精明的用戶可以通過清除Cookie智勝您的使用限制,並繼續玩一整天。

雖然餅乾的方法很簡單,它確實有一個洞。

你可能要考慮的是捕獲用戶的輸入IP地址,並將其存儲在數據庫中,或本地緩存(取決於您的應用程序是如何架構),或一些其他存儲庫。

您可以通過使用服務器請求變量REMOTE_ADDR捕捉輸入IP地址。

Request.ServerVariables["REMOTE_ADDR"] 

此外,根據您的應用程序是如何託管,您的供應商可能無法正確報告這一目的(例如,如果你的服務器是負載平衡器後面的,這可能是負載平衡器的IP)。您可能還想檢查您的提供商是否使用「X_FORWARDED_FOR」標頭轉發此信息。 (有些設備在這個標題的名稱中使用不同的變化,檢查你的文檔)。

那麼這將是一個稍微複雜一些,但也將能夠關閉孔多一點的使用限制爲僅每天3次。

我希望這會有所幫助。祝你好運!

+0

這一個也有一個漏洞:如果用戶關閉,並且他的電纜調制解調器可能會得到一個新的IP地址,然後這個檢查也會失敗。另一方面,我不認爲他還有什麼可以做的,所以無論是這種方法還是cookie都是他唯一的選擇。 – Icarus

+0

小修正 - 它實際上是'Request.ServerVariables',而不是'Request.Server'。但我個人更喜歡'Request.UserHostAddress',它可以讓你得到同樣的東西,但編譯安全。 –

+0

@Joe Enos - 謝謝...更正了代碼。猜猜我不應該忘記我的記憶了。 :) –

0

我沒有看到你在哪裏檢查日期和復位計數爲零,如果它是一個新的一天。

而且,它是每天還是每24小時?