[英]MarkLogic App Server Custom Login Page sessionID cookie with GET request
[英]MarkLogic app server custom login page does not receive SessionID cookie from ajax GET request
我正在為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響應頭和/或我該如何解決它?
我的設置:
提前致謝。
可能重復,我在另一篇文章中找到答案。 從AJAX POST響應中獲取並存儲cookie(來自Set-Cookie) 。
我只需要在我的ajax請求中包含以下行:
xhrFields: { withCredentials: true },
如果在Access-Control-Allow-Origin標頭中有通配符,則會拋出錯誤,我還必須更改此行:
xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');
對此:
xdmp.addResponseHeader('Access-Control-Allow-Origin', 'http://localhost:8010');
現在我的瀏覽器會收集cookie。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.