1

我们正在使用SocketRocket实现聊天功能。但是问题是在初始化的时候SocketRocket,它被服务器端的登录过滤器过滤了,所以它不能做http 3次握手成功。当我们删除服务器端登录过滤器时,SocketRocket可以成功与服务器端对话,但服务器端无法知道用户是谁。

所以我在想这是否是SocketRocket不同步cookie的原因AFNetworking,因为我们的登录正在使用AFNetworking库。那么是否有人知道如何在它们之间同步 cookie,或者如果您认为这是其他原因,请告诉我。提前致谢。

这是我们用来连接服务器的方法SocketRocket

-(void)connectWebSocket{
    _webSocket.delegate = nil;
    _webSocket = nil;
    NSString *urlString = ChatUrl;
    SRWebSocket *newWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:urlString]];
    newWebSocket.delegate = self;
    [newWebSocket open];
}
4

1 回答 1

0

我只是有同样的问题。您需要将 cookie 添加为 websocket 上的请求 cookie。如果您的 websocket URL 与您的登录 URL 不同(例如wss://www.example.comvs https://www.example.com),您需要从基本 URL 复制 cookie。对于上面的示例:

-(void)connectWebSocket{
    _webSocket.delegate = nil;
    _webSocket = nil;
    NSString *urlString = ChatUrl;
    SRWebSocket *newWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:urlString]];

    // Set the cookies. Need to use the base URL that your login credentials are on.
    NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:BaseUrl];
    newWebSocket.requestCookies = cookies;

    newWebSocket.delegate = self;
    [newWebSocket open];
}
于 2016-03-01T16:31:19.103 回答