【问题标题】:How to stop extending cookie expiration time for ajax calls?如何停止延长 ajax 调用的 cookie 过期时间?
【发布时间】:2019-02-03 21:48:21
【问题描述】:

我将 ExpireTimeSpan 设置为一天,但我在 UI 中有通知服务,每 5 分钟发送一次 ajax 调用,所以 ajax 调用会延长过期时间,因为如果在一段时间后系统不会注销用户处于活动状态,我该如何解决这个问题

        int expireTime = 1440; //one day

        app.UseCookieAuthentication(new CookieAuthenticationOptions
         {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            ExpireTimeSpan = TimeSpan.FromMinutes(expireTime),
            SlidingExpiration=true, 
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });

我为 asp.net core 找到了这个解决方案: https://medium.com/cacti-pins/conditionally-set-sliding-expiration-time-on-authentication-cookies-in-asp-net-core-e70ffe7da49d 但我使用的是 .net4.5

【问题讨论】:

    标签: c# asp.net-mvc cookies asp.net-identity owin


    【解决方案1】:

    我认为这个问题没有特别简单的解决方案,但您可以考虑几个途径。

    首先,您可以考虑将WebSockets 用于通知服务。在 C# 应用程序中,使用 SignalR 似乎是明智的。这将允许您打开客户端和服务器之间的持久连接并启用服务器推送,这应该只涉及在初始连接上发送 cookie。请注意,默认情况下,如果浏览器不支持其他选项,SignalR 可以降级为长轮询,这仍然会遇到同样的问题。

    或者,您可以考虑将 ajax 调用换成 javascript fetch()。这将允许您在发出请求时省略 cookie。但是,您将需要在您的应用程序中生成一个替代授权令牌并对其进行管理。您可能还需要将通知服务移动到它自己的应用程序中,这样它就不会使用相同的身份验证方案。

    【讨论】:

    • 我在操作之前使用了这个过滤器,但我不知道如何清除响应中的 owin cookie public class DoNotExtendAuthenticationAttribute : ActionFilterAttribute { // 如何清除响应中的 owin cookie }
    • 我不确定这是否会有所帮助 - 身份验证发生在管道的更深处,您所要做的就是在下一个完整请求时注销用户
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2022-07-19
    • 1970-01-01
    相关资源
    最近更新 更多