C#Cookie-Expires属性赢得';t集

C#Cookie-Expires属性赢得';t集,c#,.net,cookies,C#,.net,Cookies,我有一个页面,用户通过web服务登录到后端应用程序。web服务返回一个会话ID,我想将其存储在cookie中40分钟,因为40分钟后后端应用程序会自动关闭会话 我编写cookie的代码: private void SetCookie() { Response.Cookies.Add(new HttpCookie("Cookie_SessionID")); Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID;

我有一个页面,用户通过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始终具有
Expires
0001-01-01 00:00:00
,即使我在浏览器中查看cookie时它的过期时间正确

在读取了过期cookie没有发送到服务器的状态之后,我假设可能发生的情况是cookie被正确写入,但是浏览器没有发送过期日期,因为它实际上是不必要的

我的问题是,我想准确地捕捉到这一点——cookie已“过期”,因此他们必须再次登录——但我需要显示一条消息,大意是“我知道你已经登录,但你需要再次登录”之类的内容


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

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

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

处理此问题的更为普遍的方法是,当用户尝试访问受保护的资源时,将其重定向到登录页面,并显示一些消息,内容大致如下:“您需要登录才能查看此页面。如果您以前登录过,则您的会话可能已过期。”

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