1

我想为网站的所有匿名访问者无缝地保持状态。例如,仅在第一次访问时显示提示,并最初通过客户端上的 cookie 分析 java 脚本阻止“投票”按钮出现(原因与服务器端的二级基于 ip 的过滤有关)。

如何在客户端浏览器中管理这些 cookie。理想情况下,我想将它们用作可以在服务器和客户端上读写的字典。如果这都是基本的东西,请展示我如何将“hasVoted”布尔值分配给用户的 cookie 并在客户端和服务器上读取它。

如果我的想法有什么根本错误,请告诉我=)

4

1 回答 1

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 布尔值,将其放入 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);
}

看看这个http://www.quirksmode.org/js/cookies.html

于 2012-08-06T23:00:12.693 回答