Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc FedAuth cookie在Firebug中不显示过期日期_Asp.net Mvc_Asp.net Identity - Fatal编程技术网

Asp.net mvc FedAuth cookie在Firebug中不显示过期日期

Asp.net mvc FedAuth cookie在Firebug中不显示过期日期,asp.net-mvc,asp.net-identity,Asp.net Mvc,Asp.net Identity,我有一个用SSL保护的ASP.Net MVC站点,正在使用System.IdentityModel.Services创建如下令牌: SessionSecurityToken token = new SessionSecurityToken(myClaimsPrincipal, TimeSpan.FromDays(1)); SessionAuthenticationModule sam = FederatedAuthentication.SessionAuthenticationModule; s

我有一个用SSL保护的ASP.Net MVC站点,正在使用
System.IdentityModel.Services
创建如下令牌:

SessionSecurityToken token = new SessionSecurityToken(myClaimsPrincipal, TimeSpan.FromDays(1));
SessionAuthenticationModule sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie(token);
当我在浏览器中访问站点时,Firebug不会按预期显示过期日期。相反,到期日期显示为会话:


谁能解释一下为什么会这样?我假设ASP.Net在读取cookie时仍然可以在内部看到实际的过期日期?更重要的是,cookie过期时间实际设置在哪里?

您在这里混合了两种不同的东西:

  • 令牌到期正在确定令牌何时有效。在此之后,即使令牌被附加到请求,它也被认为是无效的,不会被接受。通常,过期时间在令牌本身内加密,这意味着它完全由令牌颁发者控制

  • Cookie过期是由客户端(本例中是您的Web浏览器)控制的。一旦Cookie过期,它就不再附加到请求。但是,如果浏览器决定发送它,它将一直工作到令牌过期为止

在您的特定情况下,令牌到期时间设置为1天,但由于Cookie到期时间设置为“会话”,这意味着如果您要在令牌到期之前的某个时间点结束会话(通常通过关闭浏览器窗口),将不会发送Cookie,您将需要再次登录

1天后(当令牌过期时),即使您仍在会话中,也始终需要再次登录

更新(根据您的评论):

票证过期和Cookie过期可以单独设置,因为有时票证不一定包含在Cookie中。可以使用其他方法(QueryString、自定义HTTP头等)将其发送到服务器。然而,实际上,自然的做法是将它们都设置为相同的过期时间

会话securityToken
中也是如此,如果将其
IsPersistent
标志设置为
true
,您将注意到Cookie过期时间现在与票据相同:

SessionSecurityToken token = new SessionSecurityToken(myClaimsPrincipal, TimeSpan.FromDays(1));
token.IsPersistent = true;

好的,很好,谢谢。如果我希望用户在一天内不必再次登录(无论浏览器是否关闭),我是否需要将cookie和令牌到期时间都设置为1天?我假设令牌颁发者会自动执行此操作,因为它们都具有相关的性质?您能否提供有关这两个属性为何不会自动链接的详细信息?例如,cookie与令牌保持一致?当然,如果令牌被写入cookie,那么cookie应该自动与令牌timespan保持一致,因为只有两个对象组合在一起才能提供有效的ClaimsEntity?