在HttpHandler中修改Cookie的值

时间:2011-06-10 00:10:35

标签: c# asp.net cookies httphandler

我有一个cookie用于持久保存用户的用户ID,但我很难用新值替换它。根据MSDN,我应该能够简单地覆盖该值,但它一直没有工作。我正在处理程序中执行登录逻辑,并且如果用户成功则将用户传递到新网页。

public void ProcessRequest(HttpContext context)
{
    User user = User.FindByUsernameAndPassword(
        context.Request.Form["username"],
        context.Request.Form["password"]);

    context.Response.Cookies["user_id"].Value = user.ID.ToString();

    context.Response.Redirect("/profile", true);
}

我第一次登录时运行良好,但如果我尝试通过使用新用户ID命中处理程序来覆盖当前cookie,则不会更改cookie值并继续以用户身份登录我什么时候碰到它。

其他网页使用Cookie登录,但由于用户ID未更改,因此不会更改已登录的用户。

public User User { get; set; }

public override void Page_Load()
{
    this.User = User.Find(int.Parse(Request.Cookies["user_id"].Value));
}

2 个答案:

答案 0 :(得分:6)

尝试添加.Value

context.Response.Cookies["user_id"].Value = user.ID.ToString();

答案 1 :(得分:4)

根据MSDN site,您已经编写了一个具有相同名称的新cookie,而不仅仅是修改它:

  

修改和删除Cookie

     

您无法直接修改Cookie。   相反,更改cookie包含   使用新值创建新cookie   然后将cookie发送给   浏览器覆盖旧版本   在客户端上。以下代码   示例显示了如何更改   存储计数的cookie的值   用户访问该网站的内容:

int counter;
if (Request.Cookies["counter"] == null)
    counter = 0;
else
{
    counter = int.Parse(Request.Cookies["counter"].Value);
}
counter++;

Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);

我同意关于添加.Value属性的第一篇文章,然后也可以添加.Expires,看看会发生什么。