我想为网站的所有匿名访问者无缝地保持状态。例如,仅在第一次访问时显示提示,并最初通过客户端上的 cookie 分析 java 脚本阻止“投票”按钮出现(原因与服务器端的二级基于 ip 的过滤有关)。
如何在客户端浏览器中管理这些 cookie。理想情况下,我想将它们用作可以在服务器和客户端上读写的字典。如果这都是基本的东西,请展示我如何将“hasVoted”布尔值分配给用户的 cookie 并在客户端和服务器上读取它。
如果我的想法有什么根本错误,请告诉我=)
我想为网站的所有匿名访问者无缝地保持状态。例如,仅在第一次访问时显示提示,并最初通过客户端上的 cookie 分析 java 脚本阻止“投票”按钮出现(原因与服务器端的二级基于 ip 的过滤有关)。
如何在客户端浏览器中管理这些 cookie。理想情况下,我想将它们用作可以在服务器和客户端上读写的字典。如果这都是基本的东西,请展示我如何将“hasVoted”布尔值分配给用户的 cookie 并在客户端和服务器上读取它。
如果我的想法有什么根本错误,请告诉我=)
在他们投票后(我假设发生在 POST 中),您需要设置 cookie:
[HttpPost]
public ActionResult Vote()
{
HttpCookie hasVoted = new HttpCookie("hasVoted", true);
Request.Cookies.Add(hasVoted);
return RedirectToAction("Index");
}
得到它是这样的:
[HttpGet]
public ActionResult Index()
{
bool hasVoted = Request.Cookies["hasVoted"].Value;
return View();
}
如果我这样做,我会采用 hasVoted 布尔值,将其放入 ViewModel 中,并根据 .aspx 页面中的该值设置按钮的可见性。如果你真的想要,你可以使用 javascript 读写 cookie:
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}