Javascript MarkLogic应用程序服务器自定义登录页未从ajax GET请求接收SessionID cookie

Javascript MarkLogic应用程序服务器自定义登录页未从ajax GET请求接收SessionID cookie,javascript,ajax,cookies,http-headers,marklogic,Javascript,Ajax,Cookies,Http Headers,Marklogic,我正在为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');

我正在为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请求“

这也将成功登录,但从服务器返回的头不包括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响应头和/或如何修复它

我的设置:

  • 标记逻辑9
  • 端口8601上的HTTP应用程序服务器
  • 端口8010上的python simpleserver(所有本地主机)
  • 我尝试过多个用户(包括管理员),所以我不认为这是一个隐私问题

提前谢谢。

可能重复,我在另一篇帖子中找到了答案

我只需要在ajax请求中包含以下行:

xhrFields: { withCredentials: true },
由于如果您的Access Control Allow Origin标头中有通配符,则会引发错误,因此我还必须更改此行:

xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
为此:

xdmp.addResponseHeader('Access-Control-Allow-Origin', 'http://localhost:8010');

现在我的浏览器收集cookies。

可能重复,我在另一篇文章中找到了答案

我只需要在ajax请求中包含以下行:

xhrFields: { withCredentials: true },
由于如果您的Access Control Allow Origin标头中有通配符,则会引发错误,因此我还必须更改此行:

xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
为此:

xdmp.addResponseHeader('Access-Control-Allow-Origin', 'http://localhost:8010');

现在我的浏览器收集cookies。

第二个请求中的服务器响应标题看起来可疑。您的AJAX调用是否通过一些中间件或代理?我不这么认为,所有内容都是本地托管的。尽管我不知道如何确定。有什么方法可以确定吗?还有,它是否与事实上,我使用的是跨域请求?或者我使用的是python SimpleHTTPServer而不是apache,等等?第二个请求中的服务器响应头看起来很可疑。您的AJAX调用是否通过一些中间件或代理?我不这么认为,所有内容都是本地托管的。尽管我不知道如何确定。是否有我可以确定的一种方法是什么?还有,这是否与我使用的是跨域请求有关?或者我使用的是python SimpleHTTPServer而不是apache,等等?