[英]Can't login to https sever via ajax
我目前正在使用jquery处理用户脚本,该脚本在http网页上调用https请求以登录论坛。 但是现在我遇到了一个cookie问题:无法通过ajax请求设置cookie。
这里有两张图片显示了传统登录和ajax登录之间的区别:
传统的:
Ajax一:
$.post()
发布用户名和密码,并获取set-cookie 在这里,我发布了我的greasemonkey用户脚本:
// ==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'});
有人可以帮帮我吗?
因为您的登录名位于http:上,要发布的网站位于https:上,所以您要处理浏览器和jquery中内置的跨站点脚本限制。 在同一台服务器上使用jquery到Web服务时遇到了类似的问题,但端口不同(您也尝试这样做)。
一些选项:-通过常规形式的按钮进行发布-将jquery移至https域(登录前需要https访问;这提供了安全的密码传输,但是您必须将访问内容与https访问分开来进行阻止) -使用一些服务器端脚本弥合差距。 我发现http://benalman.com/projects/php-simple-proxy/非常有用。
要诊断问题(检查我的假设是否正确),您可以使用Firefox(我更喜欢FireBug)内置的Web控制台,或Chrome的可选开发者程序包。
看控制台; 检查post命令。 请注意您的帖子将要访问的域/端口。 我希望从帖子中删除域名/端口信息。
另一种选择: 使用jQuery跨域 。 但请注意:当允许跨域时,请注意不要为任何其他域打开后门!
希望这可以帮助。
@adriaan直接回答了这个问题,我对此给予了要点。
你不能通过AJAX做到这一点。
您可以尝试以下方式进行模拟:
我认为最好从客户信任级别重定向到HTTPS对网站安全性的感知,类似于在电子商务中强制HTTPS的发生方式。
有关此示例,请参见KitGUI.com。
我不知道为什么会这样,但我想我知道如何解决。
事实是,您不需要使用php设置cookie,也可以使用JavaScript设置它。
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");
});
如果这不起作用,也可能是您触发了第二个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'});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.