修改Cookie';s HttpHandler中的值

本文关键字:HttpHandler Cookie 修改 | 更新日期: 2023-09-27 17:58:53

我有一个cookie,用来保存用户的userid,但我很难用新值替换它。根据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));
}

修改Cookie';s HttpHandler中的值

尝试添加.Value

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

根据MSDN网站,您已经编写了一个同名的新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,看看会发生什么。