2011-09-06 93 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小时?