Ajax:HTTP基本身份验证和身份验证Cookie
问题描述:
我想将HTTP基本身份验证标题存储在身份验证Cookie中,这样我就不必在随后的请求中处理授权头(我正在使用jQuery):Ajax:HTTP基本身份验证和身份验证Cookie
authenticate: function(auth) {
var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
document.cookie = "Authorization: " + header;
$.ajax({
type: "GET",
url: "http://someurl",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: auth.success,
error: auth.error
});
},
虽然这似乎对于谁登录的第一个用户的工作,它不会对浏览器会话中的任何其他用户的工作,因为后续授权头被加入,而不是覆盖。我知道可以使用name=value
语法覆盖cookie,但该语法不适用于授权标头。
有没有什么办法摆脱旧的授权头一旦新用户登录?
任何帮助,将不胜感激。谢谢,JeHo
答
看来,它不适用于第一个用户。问题是,授权标题可能是早期浏览器设置的(当我使用浏览器的验证对话框时)。
我现在正在做的是将登录信息存储在标准名称=值cookie中并手动设置授权标头。
将Cookie:
var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
document.cookie = "Authorization=" + header;
读取cookie:
function getAuthCookie() {
var cn = "Authorization=";
var idx = document.cookie.indexOf(cn)
if (idx != -1) {
var end = document.cookie.indexOf(";", idx + 1);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(idx + cn.length, end));
} else {
return "";
}
}
集合授权头:
$.ajax({
type: "GET",
url: "http://someurl",
contentType: "application/json; charset=utf-8",
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", getAuthCookie());
},
dataType: "json",
success: auth.success,
error: auth.error
});
这似乎有点尴尬,但它的作品。
你可以更改服务器端的任何代码吗?你使用什么语言(PHP,Python等)? – bpedro 2010-03-16 15:17:36
服务器端是一个selfhosted(WebServiceHost)wcf数据服务(用C#编写)。我是这个东道主的老板,所以我可以改变它 - 但我担心可能性是有限的。 – Jeldrik 2010-03-16 15:51:08