2011-12-20 25 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方法可以包括您所選擇的加密。

相關問題