【问题标题】:C# Cookie - Expires property won't setC# Cookie - Expires 属性不会设置
【发布时间】:2011-12-29 23:52:05
【问题描述】:

我有一个用户通过 Web 服务登录到后端应用程序的页面。 Web 服务返回一个会话 ID,我想在 cookie 中存储 40 分钟,因为 40 分钟后后端应用程序会自动关闭会话。

我编写 cookie 的代码:

private void SetCookie()
{
    Response.Cookies.Add(new HttpCookie("Cookie_SessionID"));
    Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID;
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40);

    //.... after a few more things
    Response.Redirect(returnUrl);
}

然后在接收页面上我有这个:

private HttpCookie GetCookie()
{
    HttpCookie cookie = Request.Cookies["Cookie_SessionID"];
    if (cookie != null && cookie.Value != null)
    {            
        return cookie;
    }
    return null;        
}

由于某种原因,GetCookie() 返回的 cookie 始终具有 Expires0001-01-01 00:00:00,即使当我在浏览器中查看 cookie 时它具有正确的到期时间。

阅读 this 哪些状态过期的 cookie 根本没有发送到服务器,我认为可能发生的情况是 cookie 正在正确写入,但浏览器没有发送 到期日期,因为它实际上是不必要的?...

我的问题是我想准确地捕捉到 - cookie 已“过期”,因此他们必须再次登录 - 但我需要显示一条消息,如“我知道你已经登录但你'将需要再做一次”类型的事情。

谢谢

【问题讨论】:

    标签: c# .net cookies


    【解决方案1】:

    浏览器不会向服务器发送任何内容,除了 cookie 名称和值。设置 cookie 后,无法在请求中检索所有其他属性(过期、域、路径、httponly...)。

    如果您想显示这样的消息,那么您将需要一些其他机制来检测用户是否已登录。您可能会设置一个存在 cookie 一年左右,然后检查它是否存在。

    更普遍的处理方法是在用户尝试访问受保护的资源时将用户重定向到登录页面,并显示一些类似于“您需要登录才能查看此页面。如果您是以前登录过,您的会话可能已过期。”

    (另请注意,您应该在每个请求上重新设置 cookie,以便用户在继续使用该站点时不会被注销。从您的代码中不清楚您是否这样做。 )

    【讨论】:

      【解决方案2】:

      HTTP 协议不会向服务器发送 cookie 过期日期。

      【讨论】:

        猜你喜欢
        • 2018-05-31
        • 2023-02-25
        • 2013-07-15
        • 1970-01-01
        • 2020-07-04
        • 2011-09-17
        • 2016-04-20
        • 2020-04-11
        • 2013-07-14
        相关资源
        最近更新 更多