我正在尝试维护用户的连接ID,我的意思是即使他刷新了他获得相同连接的页面
这是我现在能做的事情
javascript部分
// Start the connection
$.connection.hub.start(function () { chat.join(projectId, userId, userName); }).done(function () {
alert("Connected!");
var myClientId = $.connection.hub.id;
setCookie("srConnectionid", myClientId, 1);
});
function setCookie(cName, value, exdays) {
try{
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate);
document.cookie = cName + "=" + c_value;
}
catch(err){
alert(err.Description);
}
}
然后我创建了一个像这样继承IConnectionIdFactory的类
public class MyConnectionFactory : IConnectionIdFactory
{
public string CreateConnectionId(IRequest request)
{
if (request.Cookies["srconnectionid"] != null)
{
return request.Cookies["srconnectionid"];
}
return Guid.NewGuid().ToString();
}
}
我在Application_start()中注册了上面的类,如下所示
protected void Application_Start()
{
AspNetHost.DependencyResolver.Register(typeof(IConnectionIdFactory), () => new MyConnectionFactory());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
我的问题是每次在CreateConnectionId中调用MyConnectionFactory类 request.Cookies [“srconnectionid”]每次都为null,因此每次都会为用户分配新的connectionid。我只能找到一个帮助我维护连接ID的链接。它是http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances
任何人都可以建议如何解决我的问题,还是有其他方法可以为同一个用户重用连接ID?
Cookie值在客户端设置。我已经尝试了2天。这将是很好的帮助
提前致谢
答案 0 :(得分:1)
cookie的过期日期应为UTC字符串(您不是这样做的,所以很可能服务器将您的cookie视为已过期)。像这样更改你的代码:
var cValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = cName + "=" + cValue;
或者您可以使用jQuery Cookie plugin来设置Cookie。
更新
在您提供的代码中,cookie的名称也是不一致的。您正在设置名为“userConnectionid”的cookie,但尝试通过名称“srconnectionid”进行访问。请检查您是否在那里没有拼写错误。
答案 1 :(得分:0)
确保设置cookie的路径,尤其是当页面位于子目录中时。我正在遵循类似的方法,当cookie路径设置为root时,它一切正常。