使用 XMLHttpRequest 进行 302 重定向后的 Cookie 管理
Cookie management after 302 redirection with XMLHttpRequest
我正在为 ownCloud 开发一个 Firefox OS 客户端。当我尝试登录并将用户凭据发送到服务器时,我需要获取我将在每个请求中用于在ownCloud中进行身份验证的cookie作为响应。
我的问题是,正如我在 Wireshark 中看到的那样,cookie 是通过 HTTP 302 消息发送的,但我无法在我的代码中读取此消息,因为 Firefox 会自动处理它,并且我读取了最终的 HTTP 200 消息,其中没有 cookie 信息
request.reponseText;
request.getAllResponseHeaders();
所以我的问题是,是否有任何方法可以读取此HTTP 302消息标头,或者我是否可以在发送下一个请求之前从Firefox OS获取cookie,甚至使Firefox OS自动添加cookie。我使用以下代码进行开机自检:
request = new XMLHttpRequest({mozSystem: true});
request.open('post', serverInput, true);
request.withCredentials=true;
request.addEventListener('error', onRequestError);
request.setRequestHeader("Cookie",cookie_value);
request.setRequestHeader("Connection","keep-alive");
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send(send_string);
if(request.status == 200 || request.status==302){
response = request.responseText;
var headers = request.getAllResponseHeaders();
document.getElementById('results').innerHTML="Server found";
loginSuccessfull();
}else{
alert("Response not found");
document.getElementById('results').innerHTML="Server NOT found";
}
"mozAnon
布尔值:将此标志设置为 true 将导致浏览器在获取资源时不公开源和用户凭据。最重要的是,这意味着除非使用 setRequestHead 明确添加,否则不会发送 cookie。
莫兹系统
布尔值:将此标志设置为 true 允许建立跨站点连接,而无需服务器使用 CORS 选择加入。需要设置 mozAnon:true,即这不能与发送 cookie 或其他用户凭据结合使用。[0]
我不确定您是否是owncloud开发人员,但是如果您是并且可以访问服务器,则应尝试设置CORS标头。[1] 也许您可以建立代理服务器并让您的应用程序连接到启用了 CORS 的代理服务器?
还有一个 withCredentials 属性 [2],您可以在 xhr 对象的实例上设置。 看起来它会添加标头Access-Control-Request-Headers: "cookies"
并发送 HTTP 选项请求,这是预检 [3]。 因此,这仍然需要服务器端对 CORS 的支持。[4]
虽然根据内部评论 [5],这似乎不应该工作,但我能够从模拟器运行它并查看请求和响应标头:
var x = new XMLHttpRequest({ mozSystem: true });
x.open('get', 'http://stackoverflow.com');
x.onload = function () { console.log(x.getResponseHeader('Set-Cookie')); };
x.setRequestHeader('Cookie', 'hello=world;');
x.send();
如果响应标头存在,您可能希望在 onload 事件中重新分配 document.cookie,而不是记录它(并非每个站点在每个请求上都设置 cookie)。 您还需要将请求标头设置为 document.cookie 本身。
[0] https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#XMLHttpRequest%28%29
[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
[2] https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#Properties
[3] https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests
[4] http://www.html5rocks.com/en/tutorials/cors/#toc-making-a-cors-request
[5] https://bugzilla.mozilla.org/show_bug.cgi?id=966216#c2
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何访问声音管理器2创建的声音对象
- 在jquery中为显示/隐藏设置cookie
- 按下按钮时保存cookie
- JS编译器/包管理器,用于版本控制
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 以角度管理动态URL
- React Redux错误页面管理
- 让Webpack管理Quirky AMD定义的最佳方式
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- 如何在Analytics.js中始终了解最新的cookie过期时间
- 如何使用 ExtJS6 cookie 提供程序和状态管理登录表单.管理器 + OL3 用于网络制图应用程序
- 使用 XMLHttpRequest 进行 302 重定向后的 Cookie 管理
- 使用C#以编程方式返回Javascript管理的cookie
- 节点无浏览器web客户端,可以管理cookie
- 使用angular.js管理用户登录中的会话和cookie
- jquery插件管理cookie
- 使用JAX-RS进行JavaScript cookie管理
- Google标签管理器仅在用户接受cookie策略时才启动标签
- 在多个“域”上管理Cookie