我正在构建一个 chrome 扩展。在其中,我使用了这段代码:
new WebSocket("wss://api.example.com/");
问题是我的浏览器中带有 cookie 的网站是 WWW.example.com
,因此 WebSockets 不会传递 session cookie。
我需要的是:
new WebSocket("wss://api.example.com/", { "cookies": [ { "session": sessionKey } ] });
我怎样才能做到这一点?
最佳答案
创建 cookie 的域可以决定是否允许子域查看 cookie。只有 cookie 的创建者可以对此做任何事情。如果 www.example.com
在 example.com
上设置 cookie 并允许子域看到它,那么 api.example.com
将能够看见了。否则,api.example.com
将不允许看到该 cookie。这就是浏览器安全性的工作原理。
如果您知道 Javascript 中的 sessionKey
,您可以自己将其设置到允许子域的 example.com
cookie 中,然后它会自动与 webSocket 一起发送向 www.example.com
请求。您没有明确发送 cookie。您在您的域上设置 cookie 并允许访问子域。然后,cookie 将在 Ajax 调用和 webSocket 连接请求中自动发送。
在您的特定情况下,您可以这样做:
document.cookie = "session=" + sessionKey + ";path=/;domain=example.com;"
关于authentication - 使用 chrome WebSockets 时如何传递额外的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35140699/