我正在开发一个由域模型(在其单独的项目中)和 MVC3 Web应用程序(再次在其自己的项目中)组成的解决方案。
在我的MVC3应用程序中,我列出了帖子(通过域上的存储库访问),每个帖子都有 like button ,当然还有域名Model,Post实体的属性为:
public int Likes { get; set; }
我想要允许的是我的网站(即访客)的访问者能够点击帖子上的“赞”按钮,但只能访问一次。这样他/她就能够发布一次的帖子。
实现这一目标的最佳方法是什么?饼干 ?保存数据库中的IP地址以及喜欢的帖子ID?或者其他一些方式?
我真的很困惑,因为无论我想到哪种方式,逻辑中总会出现漏洞,用户可以像帖子一样两次!
任何帮助都会很棒。
谢谢。
答案 0 :(得分:0)
底线:绝对无法阻止多票,但如果有足够的开发工作,您可以部分降低风险。
答案 1 :(得分:0)
加密的cookie只能以他们无法修改的方式表示唯一用户(但是,他们可以删除)
public ActionResult Like()
{
var cookie = Request.Cookies["SecureCookieName"].Value;
if(!string.IsNullOrEmpty(cookie))
{
string plainTextGuid = Decrypt(cookie);
if(_db.Likes.Any(l => l.UniqueID == plainTextGuid))
return null;
}
// if you're here, this is a "new" user
Guid guid = new Guid();
// TODO: persist Like to database including unencrypted guid.ToString()
// set cookie value to encrypted
Request.Cookies["SecureCookieName"].Value = Encrypt(guid.ToString());
// or whatever logic you need
return null;
}
Encrypt
和Decrypt
方法可以包括您选择的加密。