C#Cookie - Expires属性不会设置

Arj*_*Arj 6 .net c# 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;
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40);

    //.... after a few more things
    Response.Redirect(returnUrl);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

读过这个说明过期的cookie只是没有发送到服务器,我假设可能发生的是cookie 正确写入但浏览器没有发送有效期,因为它实际上是不必要的?...

我的问题是我想要准确捕获 - cookie已经'过期',所以他们必须再次登录 - 但是我需要显示一条消息:"我知道你已经登录但是你需要再做一次"输入东西.

谢谢

cdh*_*wie 12

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

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

更可接受的处理方法是在用户尝试访问受保护资源时将用户重定向到登录页面,并在"您需要登录才能查看此页面"行中显示一些消息.如果您以前登录过,你的会话可能已经过期了."

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