如何在ASP.NET Core MVC上正确设置Cookie的展示日期时间

Fra*_*kly 4 c# cookies asp.net-core-mvc asp.net-core

我正在尝试从后端(Asp.Net核心)向浏览器设置Cookie,该Cookie应该在第二天的同一时间减去5分钟后过期。这是来自控制器的C#代码

HttpContext.Response.Cookies.Append("MyCookie",
       "test cookie value",
       new Microsoft.AspNetCore.Http.CookieOptions
       {
             Expires = DateTimeOffset.UtcNow.AddDays(1).AddMinutes(-5)
       });
Run Code Online (Sandbox Code Playgroud)

但是对于浏览器,它带有错误的到期日期时间。

例如,如果cookie过期日期设置为2016-09-28 19:15,则在浏览器上它将在2016-09-29T17:15过期,并且少2小时,这很奇怪,因为我的TimeZone为+1。

小智 5

DateTimeOffset.UtcNow是DateTimeOffset.Now + yourTimezone。

所以

DateTimeOffset.UtcNow.AddDays(1).AddMinutes(-5)
Run Code Online (Sandbox Code Playgroud)

将返回与

DateTimeOffset.Now.AddDays(1).AddMinutes(-5).AddHours(-2 /*your Timezone*/)
Run Code Online (Sandbox Code Playgroud)

浏览器显示一切正常。

将您的代码更改为

HttpContext.Response.Cookies.Append("MyCookie",
   "test cookie value",
   new Microsoft.AspNetCore.Http.CookieOptions
   {
         Expires = DateTimeOffset.Now.AddDays(1).AddMinutes(-5)
   });
//if you want to have the same expiration date as your server's
Run Code Online (Sandbox Code Playgroud)

或使用UtcNow +客户的时区