首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ASP.Net标识滑动过期设置为true不会重新发出cookie

ASP.Net标识滑动过期设置为true不会重新发出cookie
EN

Stack Overflow用户
提问于 2016-08-16 19:40:53
回答 2查看 7.8K关注 0票数 6

我正在使用ASP.Net身份验证来控制我的应用程序授权,我需要在指定的非活动分钟后终止用户会话,我试图通过以下方法来实现这一点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void ConfigureAuth(IAppBuilder app) {
    app.CreatePerOwinContext<UserStore>(() => new UserStore());
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/login"),
        LogoutPath = new PathString("/logout"),
        CookieDomain = ConfigurationManager.AppSettings["CookieDomain"],
        Provider = new CookieAuthenticationProvider {
            // Enables the application to validate the security stamp when the user logs in.
            // This is a security feature which is used when you change a password or add an external login to your account.  
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(2),
                regenerateIdentity: (manager, user) => manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie)
            )
        },
        SlidingExpiration = true,
    });
}

我也尝试过这种方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.UseCookieAuthentication(new CookieAuthenticationOptions {
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/login"),
    LogoutPath = new PathString("/logout"),
    CookieDomain = ConfigurationManager.AppSettings["CookieDomain"],
    ExpireTimeSpan = TimeSpan.FromMinutes(2),
    SlidingExpiration = true,
});

使用这些提示,用户cookie会话在2分钟后过期,无论用户是否在站点上处于活动状态。我在文档中读到,通过设置SlidingExpiration = true,cookie将在ExpireTimeSpan中途的任何请求中重新发出。例如,如果用户登录并在16分钟后发出第二个请求,则cookie将再次发出30分钟。如果用户登录,然后在31分钟后发出第二个请求,则系统将提示用户登录。

我不知道为什么它不工作,有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-06 15:44:29

需要说明的是:在请求刷新之前,CookieHandler正在检查cookie过期之前的剩余时间是否小于发出后所经过的时间(即它已超过一半)。这在Microsoft.AspNetCore.Authentication.Cookies的动态链接库中。

就我个人而言,我更希望有一个选项来更改流逝的百分比。当你为更安全的应用程序使用非常小的超时时间(15分钟或更短)时,让用户在7分钟不活动后超时,因为cookie在他们活动的前6分钟内从未刷新,这是相当恼人的。

也许会添加一个选项来使用剩余的timespan检查常量。例如,当cookie剩余的时间少于{TimeSpan}时,发出刷新请求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void CheckForRefresh(AuthenticationTicket ticket)
{
  DateTimeOffset utcNow = this.get_Clock().get_UtcNow();
  DateTimeOffset? issuedUtc = ticket.get_Properties().get_IssuedUtc();
  DateTimeOffset? expiresUtc = ticket.get_Properties().get_ExpiresUtc();
  bool? allowRefresh = ticket.get_Properties().get_AllowRefresh();
  bool flag = !allowRefresh.HasValue || allowRefresh.GetValueOrDefault();
  if (((!issuedUtc.HasValue || !expiresUtc.HasValue ? 0 : (this.get_Options().SlidingExpiration ? 1 : 0)) & (flag ? 1 : 0)) == 0)
    return;
  TimeSpan timeSpan = utcNow.Subtract(issuedUtc.Value);
  if (!(expiresUtc.Value.Subtract(utcNow) < timeSpan))
    return;
  this.RequestRefresh(ticket);
}
票数 1
EN

Stack Overflow用户

发布于 2020-06-17 09:18:25

我怀疑问题在于,尽管SlidingExpiration为真,但刷新行为被抑制了。查看片名源代码、CookieAuthenticationHandler类、AuthenticateCoreAsync()方法,我们可以看到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool? allowRefresh = ticket.Properties.AllowRefresh;
if (issuedUtc != null && expiresUtc != null && Options.SlidingExpiration
    && (!allowRefresh.HasValue || allowRefresh.Value))
{
    TimeSpan timeElapsed = currentUtc.Subtract(issuedUtc.Value);
    TimeSpan timeRemaining = expiresUtc.Value.Subtract(currentUtc);

    if (timeRemaining < timeElapsed)
    {
    _shouldRenew = true;
    _renewIssuedUtc = currentUtc;
    TimeSpan timeSpan = expiresUtc.Value.Subtract(issuedUtc.Value);
    _renewExpiresUtc = currentUtc.Add(timeSpan);
    }
}

即,只有当ticket.Properties.AllowRefresh为null或true时,才会发生刷新,并且根据您使用的中间件的不同,可能会将其设置为false。例如,在OpenIdConnectAuthenticationHandler和WsFederationAuthenticationHandler中,我们有...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private ClaimsPrincipal ValidateToken(...)
{
    ...
    if (Options.UseTokenLifetime)
    {
        // Override any session persistence to match the token lifetime.
        DateTime issued = jwt.ValidFrom;
        if (issued != DateTime.MinValue)
        {
            properties.IssuedUtc = issued.ToUniversalTime();
        }
        DateTime expires = jwt.ValidTo;
        if (expires != DateTime.MinValue)
        {
            properties.ExpiresUtc = expires.ToUniversalTime();
        }
        properties.AllowRefresh = false;
    }
}

请注意,UseTokenLifetime缺省为true。因此,默认行为是使用我们从IdP服务器获得的authentiaction令牌的过期时间,并在到达该过期时间时结束会话,而不管用户是否处于活动状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38983173

复制
相关文章
redis有效时间设置及时间过期处理_java设置cookie过期时间
参数1:是key 键 参数2:是值 是存入redis里的值 参数3:时间,类型为long 参数4:时间类型, 如:TimeUnit.MILLISECONDS 代表分钟 TimeUnit.SECONDS 代表秒,还有天,周,月,年自己测试
全栈程序员站长
2022/11/09
3.1K0
[ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?
今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题。我们在一个控制台应用中编写了如下一段程序,这个段程序很简单:我们通过HttpRuntime的静态属性Cache得到表示当前缓存的Cache对象,并调用其Insert方法对当前的时间实施缓存。需要注意的是,我们采用“滑动时间”过期策略,并将这个滑动时间设置为1秒。 1: class Program 2: { 3: static vo
蒋金楠
2018/01/15
2K0
asp.net页面的AutoEventWireup=”true”属性设置
我们进行asp.net Web开发时,我们会习惯性的在后台的Page_Load()方法中通过IsPostBack属性的判断加载数据。那么,问题来了,你是如何知道页面加载的时候会执行Page_Load()这个方法呢?你在后台通过委托绑定了?微软通过某些方式替我们处理了?今天我们的就以此为切入点进行进一步讨论。
全栈程序员站长
2022/08/24
1.8K0
asp.net页面的AutoEventWireup=”true”属性设置
使用cookie来做身份认证
这里先讲一下Authentication和Authorization两个词的区别。
_淡定_
2018/08/28
3.6K0
redission设置过期时间_设置redis过期时间
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
6.8K0
redission设置过期时间_设置redis过期时间
asp.net Forms身份验证详解
  在做网站的时候,都会用到用户登录的功能。对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证。对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.net的时候就是这么做的。当我将用户信息存在在Session中时,常常会遇到Session丢失导致用户无法正常访问被授权的资源,保持用户登录状态时的安全性问题,无休止的将用户导航到登录页面等莫名其妙的问题。
拓荒者IT
2019/09/25
2.1K0
redis如何设置定时过期_redis 设置过期时间[通俗易懂]
1、设置过期时间功能:即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们 set key 的时候,都可以给一个 expire time,就是过期时间,通过过期时间我们可以指定这个 key 可以存活的时间。
全栈程序员站长
2022/11/09
4.9K0
ReturnSingleDatabase为True报错
出现这个错误是因为Excel在最初发布的2016版本上加入了更新,而流传的破解包都是最初发布的版本,但好在即使是破解版本我们依然可以更新
但老师
2022/03/22
3570
ReturnSingleDatabase为True报错
javaweb cookie基本操作 以及过期时间设置无效问题解决
关于cookie设置过期无效的问题: 经过cookie.getMaxAge()获取的值,显示出来永远是-1. 但实际的值并不是-1; 可以通过关闭浏览器测试,cookie还在; 或者设置cookie时间为10,等10秒时间之后,cookie会被删除; 并不是网上说的要设置 path, domin; 你只要知道:你设置的是对的,不过除了key-value,其余的参数都不可读就行;
kirin
2021/03/23
2.4K0
IdentityServer Topics(4)- 登录
为了使IdentityServer代表用户发布令牌,该用户必须登录到IdentityServer。 Cookie认证 使用来自ASP.NET Core的cookie身份验证处理程序管理的cookie跟踪身份验证。 IdentityServer注册两个cookie处理程序(一个用于身份验证会话,另一个用于临时的外部cookie)。 这些在默认情况下使用,如果您想手动引用它们,您可以从IdentityServerConstants类(DefaultCookieAuthenticationScheme和Exter
晓晨
2018/06/22
1.3K0
你必须知道的session与cookie
Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的? 答:服务器端和客户端验证的联系就是sessionid,登录成功之后服务器会自动给客户端一个session标识也就是sessionid,而sessionid会存储到客户端的cookie里面,每次请求的时候都会带上这个标识,用来让服务器端验证身份的。服务器端的sessionid
磊哥
2018/05/08
9800
你必须知道的session与cookie
Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的? 答:服务器端和客户端验证的联系就是sessionid,登录成功之后服务器会自动给客户端一个session标识也就是sessionid,而sessionid会存储到客户端的cookie里面,每次请求的时候都会带上这个标识,用来让服务器端验证身份的。服务器端的sessionid
磊哥
2018/07/04
7290
ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
客户端和服务器基于HTTP的消息交换就好比两个完全没有记忆能力的人在交流,每次单一的HTTP事务体现为一次“一问一答”的对话。单一的对话毫无意义,在在同一语境下针对某个主题进行的多次对话才会有结果。会话的目的就是在同一个客户端和服务器之间建立两者交谈的语境或者上下文,ASP.NET Core利用一个名为SessionMiddleware的中间件实现了会话。本篇提供了几个简单的实例来演示如何在一个ASP.NET Core应用中利用会话来存储用户的状态。(本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》)。
蒋金楠
2022/09/28
7730
ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
redis设置不过期_redis设置key的过期时间命令
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
2.3K0
分布式中使用Redis实现Session共享(二)
该文章讲述了如何利用Redis的配置文件实现接口的限流,并通过实例对两种方案进行了详细的对比,最后总结出了方案的优缺点。
用户1168362
2018/01/05
1.8K0
分布式中使用Redis实现Session共享(二)
RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
很多网友会问,为什么明明集群中有多台Broker服务器,autoCreateTopicEnable设置为true,表示开启Topic自动创建,但新创建的Topic的路由信息只包含在其中一台Broker服务器上,这是为什么呢?
丁威
2019/06/15
3.2K1
理解ASP.NET Core - Cookie 的身份认证
链接:cnblogs.com/xiaoxiaotank/p/15811749.html
郑子铭
2022/03/22
1K0
理解ASP.NET Core - Cookie 的身份认证
php redis设置过期的键,redis 设置键过期时间[通俗易懂]
PEXPIRE key milliseconds 将键 key 的生存时间设置为指定的毫秒数。
全栈程序员站长
2022/11/09
3.5K0
Redis设置过期时间_redis过期时间原理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
4K0
redis设置过期时间
redis是在内存中进行缓存的,我们在设置redis缓存时,可以设置下过期时间。那么在设置时间到期后redis是如何进行数据删除的。
Tim在路上
2020/08/04
2.8K0

相似问题

如何设置asp.net标识cookie过期时间

43

Cookie不会设置过期

12

具有滑动过期的ASP.Net外部Cookie显示为会话cookie

111

Asp.net标识过期会话Cookie

25

为OpenIdConnectAuthentication设置cookie过期

119
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文