我们正在使用SocketRocket
来实现聊天功能。但问题是当初始化SocketRocket
时,它由服务器端登录过滤器过滤,因此它不能做三次握手成功的http。当我们删除服务器端登录过滤器时,SocketRocket
可以成功与服务器端通信,但服务器端无法知道谁是用户。
因此,我想是SocketRocket
不与AFNetworking
同步Cookie的原因,因为我们的登录信息正在使用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];
}
答案 0 :(得分:0)
我遇到了同样的问题。您需要在websocket上添加cookie作为请求cookie。如果您的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];
}