我想为网站的所有匿名访问者无缝保持状态。例如,仅在第一次访问时显示提示,并最初阻止“投票”按钮在客户端上出现via-cookie分析java脚本(原因是服务器端的二级基于ip的过滤)。
如何在客户端浏览器中管理这些cookie。理想情况下,我想将它们用作我可以在服务器和客户端上读取和写入的字典。如果这只是一个基本的东西,请展示我如何将“hasVoted”bool值分配给用户的cookie并在客户端和服务器上读取它。
如果我的想法有任何根本错误,请告诉我=)
答案 0 :(得分:1)
投票后(我假设在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 bool,在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);
}