我正在尝试一些关于简单http身份验证的事情,我创建了一个登录页面,我正在使用这个javascript函数从服务器请求一个受保护的页面,我正在接收http 200,我成功接收到我想要的页面的内容。问题是在我收到 http 200 之后,如果我想去另一个受保护的页面浏览器要求提供凭据。我不想在每次页面更改时都输入凭据。
如果我不使用我的登录页面,而是直接将受保护的 url 输入到浏览器,然后将我的凭据输入到浏览器的表单中:我可以浏览其他页面而无需每次都输入凭据。
function login()
{
var username = document.getElementById("UsernameInput").value;
var password = document.getElementById("PasswordInput").value;
var authorizationBasic = window.btoa(username + ':' + password);
var request = new XMLHttpRequest();
request.open("GET", "protected/mainPageEN.html", true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.setRequestHeader('Authorization', 'Basic ' + authorizationBasic);
request.setRequestHeader('Accept', 'html');
request.send();
request.onreadystatechange = function ()
{
if(request.readyState == 0) //Request not initialized
{
alert("Not initializes");
}
else if(request.readyState == 1) //Server connection established
{
alert("Server connection established");
}
else if(request.readyState == 2) //Request received.
{
alert("Request received.");
}
else if(request.readyState == 3) //Processing request
{
alert("Processing request");
}
else if(request.readyState == 4) //Done
{
if(request.status == 200) //OK
{
alert(window.location.hostname);
//Set cookie
var header = "Basic " + authorizationBasic;
document.cookie = "Authorization=" + header;
window.location = "http://" + window.location.hostname + "/protected/mainPageEN.html";
}
else if(request.status == 403) //Forbidden
{
alert(request.statusText);
alert("Forbidden");
}
else if(request.status == 404) //Not found
{
alert(request.statusText);
alert("Not Found");
}
else
{
alert(request.status);
alert(request.statusText);
}
}
};
}