2013-02-27 84 views
6

是否有任何方法可以在SignalR集线器中设置cookie,特别是OnConnected方法。我想发送一个会话ID的cookie。在服务器上设置来自SignalR集线器的cookie

我试过这个,但它似乎没有工作,它也看起来尴尬,因为我不知道为什么我需要提供一个字符串和cookie的关键值对。

public override Task OnConnected() 
{ 
    var guid = new Guid(); 
    Context.RequestCookies.Add("SessionID", new Microsoft.AspNet.SignalR.Cookie("SessionID", guid.ToString())); 
    return null; 
} 

回答

2

这是一个老问题,但万一有人跌倒就可以了,有一种方法从枢纽signalr Cookie添加2.0+ 。该HttpContextBase可通过枢纽请求上下文访问,所以你可以做这样的事情:

var newCookie = new HttpCookie("cookieName", "cookieValue"); 
Context.Request.GetHttpContext().Response.Cookies.Add(newCookie); 
0

我选择继承并使用PersistentConnection而不是Hub来在服务器上拥有更多选项。

在我的情况下,我重写OnConnectedAsync并使用那里的connectionId来跟踪连接/会话。也许你可以考虑这种方法?

protected override Task OnConnectedAsync(IRequest request, string connectionId) 
    { 
+0

我真的不能从PersistentConnections到中心交换机,这是一种彻底的改变 – 2013-02-27 14:54:46

1

我最终决定从服务的MVC控制器设置cookie,我没有找到反正在SignalR调用中设置它。

-2

我只是想同样的事情,这似乎工作:

HttpContext.Current.Response.Cookies.Add(cookie); 
+0

的演讲是关于SignalR的,但不MVC。 – Agat 2014-10-24 10:59:25

+0

很久以前,但很确定我是在SignalR上下文中完成的。 – modec 2014-10-25 12:24:34

+0

更正您的答案与更正,我会unminus。 – Agat 2014-10-28 09:58:13