【问题标题】:Modifying a Cookie's Value in a HttpHandler在 HttpHandler 中修改 Cookie 的值
【发布时间】:2011-06-10 00:10:35
【问题描述】:

我有一个 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));
}

【问题讨论】:

    标签: c# asp.net cookies httphandler


    【解决方案1】:

    尝试添加.Value

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

    【讨论】:

    • 对不起,这实际上是一个错字。如果没有.Value,代码甚至不会编译。
    • 在修改cookie的值之前是否需要检查cookie是否存在,也就是说如果cookie不存在并且我们尝试修改不存在的cookie的值会出错吗?
    • 是的,如果cookie为null,则无法访问其Value属性
    【解决方案2】:

    根据MSDN site,你已经写了一个新的同名cookie,而不是修改它:

    修改和删除 Cookies

    您不能直接修改 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 看看会发生什么。

    【讨论】:

    • 在修改cookie的值之前是否需要检查cookie是否存在,也就是说如果cookie不存在会出错,我们尝试修改不存在的cookie的值?
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2015-07-01
    • 2021-01-18
    • 1970-01-01
    • 2011-09-08
    • 2014-03-31
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多