2011-12-20 26 views
0

我的工作是由域模型(在其单独的项目)的解决方案和MVC3 Web应用程序(再次在自己的项目)。如何处理一次性用户交互

在我MVC3应用程序中,我列出的职位(通过在域存储库访问),每个岗位都有一个像按钮,当然在域模型,邮政实体具有的属性:

public int Likes { get; set; } 

我想允许是我的网站的访问者(即客人),以能够打后的Like按钮,但只有一次。以便他/她能够像一样

达到此目的的最佳方法是什么?饼干 ?在数据库中保存IP地址以及邮政编号喜欢?或者以其他方式?

我真的很困惑,因为无论我怎么想,逻辑中总是有漏洞,用户可以在这里发一个帖子两次!

任何帮助将是伟大的。

谢谢。

+0

这就是在互联网上匿名的重点。用户可以从不同的IP打你的应用程序,他们肯定可以清除他们的cookies。如果你真的想确定没有人喜欢两次,他们需要进行身份验证。 – 2011-12-20 21:52:52

+0

很感谢大卫。在这两个,饼干与IP节省..如果你是我的情况,你会做哪一个? – Ciwan 2011-12-20 21:55:40

+0

只选择一个,我会在服务器端加密一个值(比如一个GUID或其他东西),并将其存储在cookie中。这样,我可以跟踪那些不定期清除cookie的用户,并且*客户端无法修改该值。他们只能删除它。 – 2011-12-20 22:39:28

回答

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; 
} 

EncryptDecrypt方法可以包括您所选择的加密。

相关问题