gpt4 book ai didi

asp.net - 使用SignalR和传输模式长轮询时,Asp.net session 永不过期

转载 作者:行者123 更新时间:2023-12-03 12:55:07 25 4
gpt4 key购买 nike

我们有一个使用SignalR作为其通知机制的Web应用程序,问题是当我们使用IE浏览我们的Web应用程序时,SignalR使用Long Polling作为其传输类型,因此将请求发送回我们的Web服务器,因此Session永远不会过期浏览器处于空闲状态。

我们以为也许可以在Global.asax中捕获请求,看看它们是否来自SingalR,并将 session 超时设置为剩余时间(我认为这不是一个简单的解决方案)。

我们还有其他解决方案吗?

最佳答案

我当前使用的解决方法是IHttpModule,以检查请求是否为Signalr请求,如果这样删除身份验证cookie,则将防止ASP.net session 超时被重置,因此,如果您的 session 超时为20分钟,并且只有请求如果是Signalr,则用户 session 仍将超时,并且用户将不得不再次登录。

    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客户端轮询端点以获取数据时防止 session 超时更新。

关于asp.net - 使用SignalR和传输模式长轮询时,Asp.net session 永不过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com