C#Cookie - Expires属性不会设置

时间:2011-12-29 15:45:53

标签: c# .net cookies

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

我写代码的代码:

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已经“过期”,因此他们必须再次登录 - 但是我需要显示一条消息:“我知道你已经登录但是你“我需要再做一次”类型的东西。

谢谢

2 个答案:

答案 0 :(得分:12)

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

如果要显示此类消息,则需要一些其他机制来检测用户是否已登录。您可以将状态cookie设置为一年左右,并检查它是否存在。

更可接受的解决方法是在用户尝试访问受保护资源时将用户重定向到登录页面,并显示“您需要登录才能查看此页面”的消息。如果您是以前登录过,您的会话可能已过期。“

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

答案 1 :(得分:4)

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