JavaScriptredirectURL与授权标头

我设法成功地调用Apache后面的一个目录,这个目录受基本validation(htpasswd等)的保护。 Ajax GET请求正常工作并返回受保护的内容:

var encoded = Base64.encode(username + ':' + password); $.ajax({ url: "/app/test", type: "GET", beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', 'Basic ' + encoded); }, success: function() { window.location.href = '/app/test.html'; } }); 

我原来的假设是,一旦Web会话成功授权请求,就可以在“成功”块中redirect而不询问用户凭证 。 当这个代码块被调用时,用户在非受保护的环境中input了用户名和密码。 但是,当redirect被调用时,浏览器将popuplogin/密码窗口。

关于如何预先授权用户提供的基本授权会话的任何build议?

使用AJAX请求进行记录通常是可行的,因为成功的AJAX请求会设置会话cookie,透明地发送所有后续请求。

也许你的cookies设置了,但由于某种原因没有设置透明:你可以用xhr.getAllResponseHeaders()/ xhr.getResponseHeader()来检查,然后用document.cookie设置它们。

如果没有会话cookie,那么这种行为通常会失败。

您可以尝试在网址中使用用户名+密码进行重定向(不推荐,因为用户名+密码可能会在浏览器地址url栏中显示):

  window.location.href = window.location.protocol + "//" + username + ":" + password + "@" + window.location.hostname + (window.location.port ? ":" + window.location.port : "") + '/app/test.html'; 

你也应该测试,以延迟重定向…因为也许它的工作,但你需要给浏览器一些额外的时间,你尝试:

  var encoded = Base64.encode(username + ':' + password); $.ajax({ url: "/app/test", type: "GET", beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', 'Basic ' + encoded); }, success: function() { setTimeout(function() { window.location.href = '/app/test.html'; }, 333); } });