c# - 如何停止延长 ajax 调用的 cookie 过期时间?

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

我将 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

最佳答案

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

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

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

关于c# - 如何停止延长 ajax 调用的 cookie 过期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071783/

相关文章:

ruby-on-rails - 如何在 Capybara 2.4.1 中访问 c​​ookie 和 session

cookies - DWR Cookie (DWRSESSIONID) 及其使用

cookies - 设置子子域可访问的跨子域 cookie?

c# - MVC + T4MVC - 如何将 url 操作传递给表单?或者生成 Action /id 的替代方法?

c# - Linq-to-Entities,比较不同字段/列中的 int 值并返回最大值

javascript - 如何将多个简单参数从 AngularJS 传递到 Web API(使用 $resource)

c# - 为什么窗体关闭时后台线程不退出?

c# - 我们可以在 C# 中使用来自另一个 winform 的一些 winform 面板吗?

c# - EntityObject 到 DbContext

c# - 在 ASP.NET MVC 和 Azure AD 中创建自定义用户角色