跨域时取不到session

时间:2025-03-15 20:44:17

一、问题

今天在一个跨域请求的项目中,需要存储提个session为后续的操作做一个判断依据:

//设置
().setAttribute("name", "存储值");
//获取
().getAttribute("name")
结果获取到的都是null,查阅了相关资料,才了解到这是因为当进行跨域时,每一次请求都没有将sessinId带过去,服务器就认为是一个没有登录的新请求,都会在cookie里set一个新的sessionId,所以我之前存的值永远也取不到。

二、解决

使用的标准是CORS,即跨域资源共享。CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了只能同源使用的限制。

ajax请求设置为如下:

$.ajax({
        url: commonUrl + url,
        type: 'post',
        data: (obj),
        //加上 xhrFields及crossDomain
        xhrFields: { 
            withCredentials: true//允许带上凭据
        },
        crossDomain: true,
        //
        success:function(res){
        },
        error:function(){
        }
    });

同时我还在用中遇到过这样的问题,的处理方式为前端加上 withCredentials: true;

$(url, {withCredentials: true}).then(function (res) {
      (res);
     
    })

后台都统一添加:

("Access-Control-Allow-Origin", ("Origin"));//处理跨域
("Access-Control-Allow-Credentials", "true");//表示是否允许发送Cookie

在一开始解决跨域时,我采用的是 ("Access-Control-Allow-Origin""*") 处理跨域,表示接受任意域名的请求。但是设置了("Access-Control-Allow-Credentials", "true")后,就不能使用“*”,不过要处理好跨域,可以直接设置允许请求的域名:("Access-Control-Allow-Origin", "域名名称"),我在这里直接取出当前域名,又设置允许,同“*”作用相同。