我使用auth cookie开发ASP.NET应用程序,并默认使用SignalR 2.0.3与Websocket传输进行聊天。我使用"授权"授权到集线器的属性。
[Authorize]
[HubName("c")]
public class Chat : Hub
{
...
我遇到了下一个问题。在浏览器(Chrome或Firefox)中清除所有cookie后,授权stil是成功的。它仅为WebSockets传输重现。 我尝试使用HubPipelineModule来解决这个问题:
public class CheckingCookiesPipelineModule : HubPipelineModule
{
protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context)
{
if (context.Hub.Context.Request.Cookies["auth_key"].Value == string.Empty)
{
return false;
}
return base.OnBeforeIncoming(context);
}
}
它没有用,因为Cookie在Websocket请求中不是空的。 任何人都能解释一下SignalR Websocket的奇怪行为吗?是bug还是功能?可能有解决方法吗?
答案 0 :(得分:1)
WebSocket是持久连接,它们始终是连接的。 Cookie在连接握手期间发送,而不是每条消息都发送。
如果您关闭连接,再次连接时cookie应为空。