簡體   English   中英

MarkLogic應用服務器自定義登錄頁面未從ajax GET請求接收SessionID cookie

[英]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響應頭和/或我該如何解決它?

我的設置:

  • Marklogic 9
  • 端口8601上的HTTP應用服務器
  • 端口8010上的python simpleserver(所有localhost)
  • 我嘗試過多個用戶(包括管理員)所以我不認為這是一個priveleges問題。

提前致謝。

可能重復,我在另一篇文章中找到答案。 從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM