C# Cookie - Expires 属性不会设置

标签 c# .net cookies

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

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

谢谢

最佳答案

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

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

处理此问题的更可接受的方法是在用户尝试访问 protected 资源时将用户重定向到登录页面,并显示类似“您需要登录才能查看此页面。如果您是之前登录过,您的 session 可能已过期。”

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

关于C# Cookie - Expires 属性不会设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8669929/

相关文章:

c# - 将对象序列化为不带\r\n 特殊字符的 xml 和字符串

c# - 计算字符串生成器中的单词数

C# System.InvalidCastException

c# - 在 .NET 中执行简单的领域特定语言

php - PHP 中的 AWS Cloudfront SetCookie

php - iOS 中的 HTTP session cookie

c# - 从 JQuery 中的 MVC 模型获取对象

c# - 转换自定义操作过滤器以供 Web API 使用?

.net - .NET Guard类库?

php - Guzzle Http :how can I save cookies from a POST response and use it in the next POST?