当使用SignalR和传输模式长轮询时,Asp.net会话永不过期
发布时间:2020-12-16 00:43:48 所属栏目:asp.Net 来源:网络整理
导读:我们有一个Web应用程序使用SignalR作为其通知机制。问题是当我们使用IE浏览我们的Web应用程序时,SignalR使用Long Polling作为其传输类型,从而将请求发送回我们的Web服务器,因此Session不会过期浏览器空闲。 我们认为也许我们可以在Global.asax中捕获请求
我们有一个Web应用程序使用SignalR作为其通知机制。问题是当我们使用IE浏览我们的Web应用程序时,SignalR使用Long Polling作为其传输类型,从而将请求发送回我们的Web服务器,因此Session不会过期浏览器空闲。
我们认为也许我们可以在Global.asax中捕获请求,看看它们是否来自SingalR,并将会话超时设置为剩余时间(我不认为这是一个简单的解决方案)。 有没有其他的解决方案,我们失踪? 解决方法
我目前使用的解决方法是一个IHttpModule来检查请求是否是Signalr请求,如果删除了认证cookie,这将阻止ASP.net会话超时重置,因此如果您的会话超时为20分钟,并且唯一的请求是Signalr用户会话仍将超时,用户将不得不重新登录。
public class SignalRCookieBypassModule : IHttpModule { public void Init(HttpApplication application) { application.PreSendRequestHeaders += OnPreSendRequestHeaders; } private bool IsSignalrRequest(string path) { return path.IndexOf("/signalr/",StringComparison.OrdinalIgnoreCase) > -1; } protected void OnPreSendRequestHeaders(object sender,EventArgs e) { var httpContext = ((HttpApplication)sender).Context; if (IsSignalrRequest(httpContext.Request.Path)) { // Remove auth cooke to avoid sliding expiration renew httpContext.Response.Cookies.Remove(DefaultAuthenticationTypes.ApplicationCookie); } } public void Dispose() { } } 我觉得这是一个真正的黑客解决方案,所以,当数据从服务器推送到客户端时,或者当JavaScript客户端轮询端点数据时,所以会喜欢其他想法来阻止会话超时更新。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- asp.net – 使用外部connectionStrings.config文
- 如何在不使用角色的情况下使用ASP.NET WebAPI实现
- asp.net-mvc – 列表中的MVC4绑定下拉列表(bug)
- asp.net – 使用Response.Redirect后,Ajax Updat
- asp.net – Response.Write和UpdatePanel
- 如何从asp中检索多个选定的值:checkbox .net c#
- asp.net – 为什么会间歇地得到这个错误? “服务
- asp.net-mvc – 如何在MVC应用程序中使用RavenDb
- asp.net – .NET Web API HttpResponseMessage模
- asp.net – 将linq查询结果转换为datatable C#
热点阅读