【问题标题】:How to read cookie expiration in dot net core?如何在 dot net core 中读取 cookie 过期时间?
【发布时间】:2017-06-22 01:28:22
【问题描述】:

我看到您可以在将新 cookie 附加到响应时使用 CookieOptions 设置过期时间。但是,HttpContext.Request.Cookies 返回一个 IRequestCookieCollection,它似乎只为您提供键/值对。

有没有办法读取请求 cookie 的 CookieOptions(特别是 Expiration)?

我正在使用 .Net Core (1.0.0-preview2-003131)

注意:我需要在请求处理中读取任意 cookie 的过期时间,而不是框架生成的 auth cookie 的过期时间。

【问题讨论】:

    标签: cookies asp.net-core asp.net-core-mvc .net-core asp.net-core-1.0


    【解决方案1】:

    我通过对事件“OnValidatePrincipal”做出反应来得到它

    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
    ... 
    Events = new CookieAuthenticationEvents
    {
    OnValidatePrincipal = CookieAuthenticationEventHandler.ValidatePrincipalAsync
    }
    });
    

    然后我可以访问,一旦主体被验证,cookie 将在我的 ValidatePrincipalAsync 中过期,属性为context.Properties.ExpiresUtc

    为了能够稍后在我的控制器中获取 expires 属性,我以这种方式将其添加到我的 HttpContext 中:

    context.Request.HttpContext.Items.Add("ExpiresUTC", context.Properties.ExpiresUtc);
    

    但是我对那部分不太满意,也许有人可以给你一个更好的方法来直接在控制器中访问它,而不必从 OnValidatePrincipal 中获取它。

    【讨论】:

    • 谢谢 - 虽然我需要在请求处理中读取任意 cookie,而不是 auth cookie。
    • 我明白了,我还没做。让我们看看是否有其他人可以提供帮助。
    • @Daboul,你能找到如何阅读 auth cookie 吗?我也需要这个。谢谢!
    【解决方案2】:

    不,HTTP 不包含有关请求发送的 cookie 的任何详细信息,仅包含它们的名称和值。 auth cookie 解决方法仅在值中嵌入过期时才有效。

    【讨论】:

    • 它存储在 AuthenticationProperties 集合中,如上面的另一个答案所示。 stackoverflow.com/a/42045462/2588374 您可以从 cookie 身份验证事件或调用 HttpContext.AuthenticateAsync 获取它。
    • 我以为您可以直接在控制器中获取它,因为它嵌入在值中。
    • cookie值是序列化加密的,不能直接读取。 Cookie Auth 处理程序为您解密并将其反序列化为 ClaimsPrincipal 和 AuthenticationProperties 集合。
    • 那我们可以手动解密吗?如果可能在控制器中,因为我们在那里有加密值。
    • 不容易。你最好在控制器中调用 HttpContext.AuthenticateAsync 来获取解密后的值。
    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 2019-04-20
    • 2020-10-26
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多