在ASP.NET MVC应用程序中保留匿名用户的状态信息

时间:2012-08-06 22:39:43

标签: asp.net-mvc security cookies state-management

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

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

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

1 个答案:

答案 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);
}

查看http://www.quirksmode.org/js/cookies.html