如何在Dot Net Core中读取cookie过期时间?

12
我看到您可以在向响应附加新cookie时使用CookieOptions设置其过期时间。然而,HttpContext.Request.Cookies返回一个IRequestCookieCollection,它只提供了键/值对。
有没有一种方法可以读取请求cookie的CookieOptions(特别是过期时间)?
我正在使用.Net Core(1.0.0-preview2-003131)
注意:我需要读取请求处理中任意cookie的过期时间,而不是框架生成的身份验证cookie的过期时间。
2个回答

6
我正在通过响应事件"OnValidatePrincipal"来实现此功能。
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
... 
Events = new CookieAuthenticationEvents
{
OnValidatePrincipal = CookieAuthenticationEventHandler.ValidatePrincipalAsync
}
});

一旦验证了主体,我就可以访问context.Properties.ExpiresUtc属性,并在cookie过期时,在我的ValidatePrincipalAsync中进行验证。

为了能够稍后在我的控制器中获取到该过期时间属性,我通过以下方式将其添加到我的HttpContext中:

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

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


谢谢 - 不过我需要在请求处理中读取任意 cookie,而不是认证 cookie。 - me_online
我看到了,这是我没有做的。让我们看看是否有其他人可以帮忙。 - Daboul
@Daboul,你找到如何读取授权cookie的方法了吗?我也需要这个。谢谢! - Amit

3
不,HTTP没有包含任何有关请求中发送的cookie的详细信息,只有它们的名称和值。身份验证cookie解决方法之所以有效,是因为过期时间也嵌入在值中。

它存储在AuthenticationProperties集合中,如上面的其他答案所示。https://dev59.com/e1gQ5IYBdhLWcg3w6IEH#42045462 您可以从cookie auth事件中获取它,或通过调用HttpContext.AuthenticateAsync来获取它。 - Tratcher
我认为你可以直接在控制器中获取它,因为它嵌入在值中。 - liang
1
Cookie的值是序列化和加密的,你不能直接读取它。Cookie Auth处理程序会将其解密并反序列化为ClaimsPrincipal和AuthenticationProperties集合。 - Tratcher
我们能手动解密吗?如果可能的话,可以在控制器中进行,因为我们已经有了加密值。 - liang
1
不是很容易。你最好在控制器中调用HttpContext.AuthenticateAsync来获取解密后的值。 - Tratcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接