我正在开发一个浏览器扩展,通过XMLHttpRequests与远程服务器进行身份验证。在Firefox(59.0.2)中,我遇到的问题是服务器发送的会话cookie没有存储在浏览器中。在查看网络流量时,我会从服务器获取每个请求的Set-Cookie响应:
Set-Cookie JSESSIONID=node01abks2u96hf84wt0i1uqwsb9879.node0;Path=/
但似乎cookie从未被接受或存储在扩展程序中。
在查看Chrome(扩展程序正在运行)时,我的扩展程序会在请求中包含此Cookie:
Cookie: io=jCX1X9rlaOhCqE0nAAAB JSESSIONID=node01abks2u96hf84wt0i1uqwsb9879.node0
然而,在Firefox中并非如此。为什么Firefox不在请求中包含cookie?为什么不存储cookie?
更新:正如我所建议的,我提交了一份错误报告: https://bugzilla.mozilla.org/show_bug.cgi?id=1454806
此外,我创建了一个失败的非常小的示例插件: https://gitlab.com/czeidler/firefox-cookie-problem 有人可以告诉我这个插件真的应该有效吗?或者我做错了什么?要触发此问题,请打开插件的调试视图,然后选择网络视图。然后单击插件弹出图标。这将触发对我的服务器的两个请求。第一个回复包含一个Set-Cookie标头,该标头不会在第二个请求中重复使用。
答案 0 :(得分:0)
我找到了它无法正常工作的原因。 Firefox将弹出窗口中的请求作为跨域请求处理,并且不会因此而设置cookie。不确定Chrome和Firefox在这里的行为是否相同,或者哪种方法更好。以下是我修复此问题以使其在两种浏览器中都能正常运行的方法:
在服务器上:
response.addHeader("Access-Control-Allow-Origin", request.getHeader("Origin"))
response.addHeader("Access-Control-Allow-Credentials", "true")
在弹出窗口中:
connection.withCredentials = true;