0

即使页面刷新,我也试图保留我的连接 ID。我在客户端保存了一个 cookie,但是在尝试检索它时,request.Cookies.Count 为 0。

这是接口实现:

public class ConnectionFactory : IConnectionIdPrefixGenerator
{
    public string GenerateConnectionIdPrefix(IRequest request)
    {
        if (request.Cookies["signalrconnid"] != null)
        {
            return request.Cookies["signalrconnid"].Value;
        }

        return Guid.NewGuid().ToString();
    }
}

这是从 Start() 函数调用的:

 GlobalHost.DependencyResolver.Register(typeof(IConnectionIdPrefixGenerator), () => new ConnectionFactory());

这是客户端:

function setCookie(cName, value, exdays) {
    var exdate = new Date(2013,1,1,0,0,0,0);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString ());
    document.cookie = cName + "=" + c_value;
}

(不要介意日期)

我看过很多关于它的帖子,但我不明白有什么区别。

4

1 回答 1

3

正如@Chris Moutray 指出的那样,最好不要以这种方式使用 ConnectionId 。如果我站在你的立场上,我会在客户端上创建一个 SessionId,将其存储在 cookie 或会话存储中,传递该 sessionId 而不是 connectionId,然后将其用作长期会话和短期会话之间的适当映射术语连接。(使用 UserId 作为映射的问题是用户可以同时从多个位置登录。)

于 2012-12-31T20:02:33.710 回答