Javascript Can';t通过ajax登录到https服务器
我目前正在使用jquery编写一个用户脚本,它在http网页上调用https请求以登录论坛。 但是现在我遇到了一个cookies问题:cookies不能通过ajax请求设置 这里有两幅图显示了传统登录和ajax登录的区别: 传统的:Javascript Can';t通过ajax登录到https服务器,javascript,jquery,Javascript,Jquery,我目前正在使用jquery编写一个用户脚本,它在http网页上调用https请求以登录论坛。 但是现在我遇到了一个cookies问题:cookies不能通过ajax请求设置 这里有两幅图显示了传统登录和ajax登录的区别: 传统的: 发布用户名和密码并获取设置cookie 向服务器发送cookie以访问某些网页 Ajax one: 使用$.post()发布用户名和密码,并获取设置cookie 不向服务器发送cookie 在这里我发布了我的greasemonkey用户脚本: // ==User
$.post()
发布用户名和密码,并获取设置cookie// ==UserScript==
// @name test
// @namespace test
// @description test
// @include http://solidot.org/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js
// ==/UserScript==
//after events dealing and blahblahblah
$.post('https://bbs6.sjtu.edu.cn/bbslogin',{id:'some',pw:'password'});
$.post('https://bbs6.sjtu.edu.cn/bbssnd',{board:'SJTUNews',title:'some',text:'article'});
有人能帮我吗?我不知道为什么会这样,但我想我知道如何解决 问题是,您不需要使用php设置cookie,也可以使用JavaScript设置cookie
var login = $.post('https://bbs6.sjtu.edu.cn/bbslogin', {id: 'some', pw: 'password'})
.success(function() {
if (login.getResponseHeader("Set-Cookie") != null)
/**
* Normally this returns a string but if not just do it with each value of the array
*/
document.cookie = login.getResponseHeader("Set-Cookie");
else
alert("Login failed");
})
.error(function() {
alert("Login failed");
});
如果这不起作用,也可能是您向fast发出第二个ajax请求,因此请尝试将其更改为:
$.post('https://bbs6.sjtu.edu.cn/bbslogin', {id: 'some', pw: 'password'})
.success(function() {
$.post('https://bbs6.sjtu.edu.cn/bbssnd', board:'SJTUNews',title:'some',text:'article'});
});
因为您的登录名是http:,而要发布到的网站是https:,所以您要处理浏览器和jquery中内置的跨站点脚本限制。在同一台服务器上使用jquery访问web服务时,我遇到了类似的问题,但端口不同(您也在尝试这样做) 一些选择: -通过一个普通的表单按钮进行发布 -将jquery移动到https域(登录前需要https访问;这提供了安全的密码传输,但您必须单独阻止对https访问之外的内容的访问) -使用一些服务器端脚本来弥补这一差距。我发现它非常有用 要诊断这个问题(检查我的假设是否正确),您可以使用Firefox内置的web控制台(我更喜欢FireBug),或者Chrome的可选开发者软件包 看看控制台;检查post命令。请注意您的帖子将要访问的域/端口。我希望域/端口信息从帖子中删除 另一个选项:。但请注意:当允许跨域时,注意不要为任何其他域打开后门
希望这有帮助。@adriaan直接回答了这个问题,我给了他一分 您不能通过AJAX实现这一点 您可以尝试以下方法进行模拟:
- 如果不支持postMessage浏览器,则通过https直接发布到登录页面,或使用iframe哈希更改轮询技术
- 如果postMessage浏览器支持,那么您可以通过跨iframe的JavaScript本机支持跨域通信,这样您就可以将表单操作发布到iframe
- 这可能是一个没有实际意义的问题,因为人们首先怀疑当前URL不是HTTPS
有关此示例,请参见KitGUI.com。是否可以包含用于设置cookies的代码。@Hristo好的,我发布脚本的主要部分。其余部分是关于事件绑定的,我认为它们不相关。@ManseUK我不使用js设置cookie,`因为我不认为jquery可以访问http网页上另一个https域的cookie。你能检查请求发出后cookie是否存在吗?@Rufus请尝试使用内置的忽略同源策略的cookie。仍然不能这样做,我想这与浏览器的策略有关。我会向mozilla寻求帮助。谢谢你,一个合理的答案终于出现了,我几乎放弃了希望。欢迎你,谢谢你的承认;在我看到曙光之前,我自己也经历过这场斗争(同一台机器上的不同端口也是跨域的)