gpt4 book ai didi

使用 websockets 的 SignalR 在事件连接期间登录/注销时保持相同的用户身份

转载 作者:行者123 更新时间:2023-12-02 16:09:43 24 4
gpt4 key购买 nike

我正在 server2012 上使用 SignalR 运行 ASP.NET MVC 4.5 应用程序,并设置启用 websockets。

页面上有登录/注销按钮,我必须在服务器上保持事件连接。

当服务器用于传输 serverSentEvents 时,一切正常,当用户更改身份验证时,我得到了回调

$.connection.hub.error(function (error) {
// stop current signalR connection and start new one
createNewConnection();
});

但是当我为 websockets 设置服务器时,它停止调用错误函数。我在论坛中发现常见的解决方案是定期 ping 服务器并更新 cookie,但是当我使用 signalR - websockets ping 服务器时,服务器无法识别用户身份已更改。

基本上,当我开始与已登录的用户连接然后单击注销时,服务器将保持 websocket 连接不变,并具有相同的用户身份:

Context.User.Identity.Name 

用户注销后将相同。

我知道用户身份在事件 signalR 连接期间无法更改,但我需要检查 cookie 是否没有更改,因为它可以从另一个打开的选项卡或窗口更改。

最佳答案

所以你所看到的是 100% 预期的。对于除 WebSocket 之外的所有传输,它们都具有间歇性通信。

例如:SSE - 有 1 个连接已建立并且从未中断来接收信息,并且每当您尝试从客户端向服务器发送数据时就会触发 AJAX 请求,AJAX 请求是间歇性请求。

现在,每次向服务器发出请求时,SignalR 都会验证用户身份。因此,对于每个在 SSE 中发送的客户端 -> 服务器,用户身份都会得到验证。但是,在 WebSocket 中,只有 1 个请求处于事件状态(用于实例化连接)并通过连接双向发送和接收流。

因此,由于 WebSockets 只有 1 个请求,因此它永远不会知道身份更改。

另一方面,如果您使用的是 SignalR 2.0.0+,您的连接将在 5 分钟的时间范围内获悉无效的用户身份(SignalR 每 5 分钟向服务器发送一个 ajax 请求)。

希望这些信息有帮助!

关于使用 websockets 的 SignalR 在事件连接期间登录/注销时保持相同的用户身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019904/

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