我正在为MarkLogic9应用程序创建自定义登录页面。我在localhost:8601上有一个http应用服务器(服务器端javascript)。 login.sjs页面很简单:
xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
xdmp.addResponseHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
xdmp.addResponseHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
xdmp.addResponseHeader('Access-Control-Allow-Credentials', "true");
xdmp.setResponseContentType("text/plain");
//generate object with field names from Request params
var params ={}; //JSON parsed URL parameters
var field_names = xdmp.getRequestFieldNames().toArray();
for(var fname_idx in field_names){
params[field_names[fname_idx]] = String(xdmp.quote(xdmp.getRequestField(String(field_names[fname_idx]))));
}
//get username and password from passed paramters
var username = params.username;
var password = params.password;
xdmp.login(username,password);
当我直接访问此页面时(即输入localhost:8601 / login.sjs?username = test&password = test),它将成功登录并响应以下标头:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-Requested-With,content-type
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:4
Content-type:text/plain; charset=UTF-8
Keep-Alive:timeout=5
Server:MarkLogic
Set-Cookie:SessionID=917f127921feb6ef; path=/
当我尝试从客户端的login.html页面访问该页面时,会发生问题,该页面发送以下ajax请求”
$("#login-button").click(function(event){
var un = $("#username").val();
var pw = $("#password").val();
if(un){
params.username = $("#username").val();
}
if(pw){
params.password = $("#password").val();
}
event.preventDefault(); //prevent form from clearing
console.log("input entered");
$.ajax({
type: "POST",
url: url,
data: params,
success: function(data){
alert("login worked");
if(data == "true"){
console.log("worked");
checkUsername();
//window.location.href = "homepage.html";
} else{
alert("login failed");
invalidLogin();
}
},
error: function(data){
invalidLogin();
}
});
});
这也将成功登录,但是从服务器返回的标头不包含SessionID cookie:
Content-Length:3022
Content-type:text/html
Date:Mon, 12 Jun 2017 08:03:36 GMT
Last-Modified:Mon, 12 Jun 2017 07:03:45 GMT
Server:SimpleHTTP/0.6 Python/2.7.13
我的问题:为什么我的login.html ajax请求页面没有收到来自服务器的Cookie响应标头和/或如何解决?
我的设置:
Marklogic 9
端口8601上的HTTP应用服务器
端口8010(所有localhost)上的python simpleserver
我已经尝试了多个用户(包括admin),所以我不认为这是一个特权问题。
提前致谢。
最佳答案
可能重复,我在另一个帖子中找到了答案。 Get and store cookie (from Set-Cookie) from an AJAX POST response。
我只需要在ajax请求中包括以下行:
xhrFields: { withCredentials: true },
由于如果Access-Control-Allow-Origin标头中包含通配符,这将引发错误,因此我还必须更改此行:
xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
对此:
xdmp.addResponseHeader('Access-Control-Allow-Origin', 'http://localhost:8010');
现在,我的浏览器收集了cookie。