我正在我的 MVC 项目中开发一个投票机制应用程序,我要求用户在浏览器中只允许投票一次,如果他在同一个浏览器中第二次到达投票页面,他不应该能够投票但如果他在另一个浏览器中登录,他应该能够再次投票。
为此,我使用了 Cookie 来处理这种情况。我所做的是将 UserID 添加到 cookie 中,并在查看页面中检查投票按钮是否可见。
我的看法是
@if ((ViewData["CookieData"] == null) || (ViewData["CookieData"].ToString() != Session["LoginPersonID"].ToString()))
{
<button name="button" value="Insert" onclick="return confirm('Are you sure you want to submit your choices ?.');">Vote Now!!</button>
<br />
@Html.ActionLink("Back to Home Page", "EmployeeHomePage", "Employee", new { logedinperson = Session["LoginPersonID"] }, null);
}
我的控制器是
public void AddCookie()
{
HttpCookie MyCookie = new HttpCookie("MyCookie", Session["LoginPersonID"].ToString());
MyCookie.Expires = DateTime.Now.AddDays(30);
Response.Cookies.Add(MyCookie);
ViewData["CookieData"] = MyCookieCollection;
}
当第一个用户说 PersonA 在 Firefox 中登录并投票时,他的 personid 存储在 cookie 中,因此如果他再次尝试访问投票页面,投票按钮将不可见,但随后他尝试在 Google Chrome 上打开他可以投票。那也按预期工作。现在当 PersonB 在 Firefox 中登录并投票时,他的 personid 会在 cookie 中更新,因此他也无法在同一浏览器中第二次投票。
但我的确切问题是当 PersonA 再次登录到 Firefox 时,他能够投票,因为 cookie 已使用 PersonB 的 id 进行了更新。那么无论如何,如果 PersonA 和 PersonB 已经在浏览器中投票,我该如何限制他们。