我们正在使用SocketRocket实现一个聊天功能。但问题是,当初始化SocketRocket时,它被服务器端的登录过滤器过滤了,所以它不能成功地进行三次http握手。当我们删除服务器端登录过滤器时,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];
}发布于 2016-03-02 00:31:19
我也有同样的问题。您需要在websocket上添加cookies作为请求cookies。如果您的websocket URL与您的登录URL不同(例如,wss://www.example.com vs 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];
}https://stackoverflow.com/questions/34849824
复制相似问题