鍍金池/ 問(wèn)答/Java  HTML/ 登錄成功后,再請(qǐng)求后端接口,返回未登錄發(fā)現(xiàn)session id 變了

登錄成功后,再請(qǐng)求后端接口,返回未登錄發(fā)現(xiàn)session id 變了

我最開(kāi)始請(qǐng)求登錄接口,登錄成功后,再請(qǐng)求數(shù)據(jù)接口,返回未登錄。
于是我把登錄接口跟數(shù)據(jù)接口脫離項(xiàng)目,放一個(gè)單獨(dú)的html文件中,然后測(cè)試發(fā)現(xiàn)請(qǐng)求是成功的,session id是一致的;
然后項(xiàng)目中的數(shù)據(jù)接口也能請(qǐng)求成功了,但等登錄時(shí)效一過(guò),項(xiàng)目中的數(shù)據(jù)接口又返回未登錄了;
只要我把單獨(dú)的html(包含登錄接口與數(shù)據(jù)接口)刷新,項(xiàng)目中的數(shù)據(jù)接口就能請(qǐng)求成功

后臺(tái)是java

我在網(wǎng)上查了很多資料,基本上與我的情況不一樣。
后也嘗試過(guò)是不是因?yàn)楫惒降脑?,用setTimeout來(lái)延時(shí)數(shù)據(jù)接口,但也沒(méi)有成功

$.ajax({
    url:'http://server/admin/login',
    type:'post',
    data:{username:'xxx',pw:'xxx'},
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    success:function(res){
        console.log(res)
        //登錄成功
    }
})
setTimeout(function(){
    $.ajax({
        url:'http://server/admin/getData',
        type:'post',
        data:{id:'10031',coin:'$',amunt:'1000'},
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        success:function(res){
            console.log(res)
            //這時(shí)后端返回的狀態(tài)碼是未登錄
            //查看sessionid時(shí)發(fā)現(xiàn)跟登錄時(shí)的sessionid不致
        }
    })
},2000)

不知道為什么把登錄接口與數(shù)據(jù)接口單獨(dú)拿出后就能請(qǐng)求成功,而在項(xiàng)目中卻返回未登錄,session id 改變?

回答
編輯回答
情皺

因?yàn)槟憧缬蛄?,所以你session_id改變,因?yàn)槟阕x取不到cookie啊,2個(gè)解決辦法:
1.后臺(tái)接口采用jwt認(rèn)證
2.后端設(shè)定允許跨域讀取cookie,以下東西在后端實(shí)現(xiàn)

header('Access-Control-Allow-Origin:前端域名');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept,X_Requested_With, x-xsrf-token");
header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS');
header('Access-Control-Allow-Credentials: true');

$.ajax增加

beforeSend: function(xhr) {
    xhr.withCredentials = true;
}
2018年2月10日 03:19