websocket 中的 cookie问题
发布于 12 年前 作者 davidqhr 24065 次浏览 最后一次编辑是 8 年前

同样的一份代码

var ws  = new WebSocket('ws://' + window.location.host + window.location.pathname);

chrome的header 无cookie firfox的header 有cookie

为什么chrome ws请求header中没有cookie呢,有牛人能给我解答下么? 如何才能让chrome ws请求header中有cookie呢??

chrome中的header信息

GET ws://localhost:4567/games/matching-game/1 HTTP/1.1
Pragma: no-cache
Origin: http://localhost:4567
Host: localhost:4567
Sec-WebSocket-Key: 9NJMQbfnt2FSN2b2MkQ9cQ==
Upgrade: websocket
Sec-WebSocket-Extensions: x-webkit-deflate-frame
Cache-Control: no-cache
Connection: Upgrade
Sec-WebSocket-Version: 13

firefox中的header

GET /games/matching-game/1 HTTP/1.1
Host: localhost:4567
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: http://localhost:4567
Sec-WebSocket-Key: iTKGrDte+JmWeHmpHnFCpQ==
Cookie: rack.session=BAh7CUkiD3Nlc3Npb25faWQGOgZFRiJFODNiOTA0NmJmZDcwNDM0NjVlYjNl%0AMGU3YThiNjU1OGM1ODkxZmYwYWVjOGFhNDUwOGVlN2QxMTdjOGRlMDEzMEki%0ADXRyYWNraW5nBjsARnsISSIUSFRUUF9VU0VSX0FHRU5UBjsARiItNTA1OTFk%0AZWE0YTk3MGM2ZGM2ODhhNzEzZTFlNWUyZWRlMzEzYzA3NUkiGUhUVFBfQUND%0ARVBUX0VOQ09ESU5HBjsARiItYTBiZmM4NzZkNjhmZTdhZWE3MDBkYTVlYTg5%0AMjVhYmFjNmYyZjc5NEkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsARiItNTBj%0AYTM5YWY5NDU1ZTM1NmY2ZTlkOTRjZjU4NzE4ZTQzNzdhZjI5NEkiCWNzcmYG%0AOwBGIkU1Yzk1ZTQ5NTlhN2YwNjVhZDE2YTA1ZWYyMjFkMWY0ODNjMzc1Yzlh%0ANWQxZDQ4NmFhMThhYmRjYjA5ZDE1OTRlSSIMdXNlcl9pZAY7AEZpBg%3D%3D%0A--8122297af5825b47cfae2bf8f30342551dfba2a4
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
6 回复

没有人能给解释下么?

你服务端用的什么库?跟踪查看下请求信息

既然建立了socket连接,只要不断开,双方就可以互发数据。想要cookie只要服务端告诉客户端,我需要cookie,客户端send一下document.cookie,服务器就收到了。也许服务器不需要cookie呢。那firefox不是白发了?

继续说两句,cookie和session是为了解决http这种无状态的协议而产生的。socket一直保持连接,不需要cookie这种东西。换个思路,cookie只能保存64K的内容。而HTML5本地存储可以保存1M-5M的内容。如果服务器需要,也可以通过socket把本地存储的内容发送到服务器,发挥更多作用。

我也这样觉得, 只有想要 ws 共享原有的 cookie 登陆信息时才会两个弄一起 一般用的时候单纯用 ws 就能保证登录功能了

我想知道connection 绑定登录用户的问题解决了吗,我现在也要解决这个问题。

回到顶部