Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express.js跨域会话未保存_Javascript_Node.js_Express_Express Session - Fatal编程技术网

Javascript Express.js跨域会话未保存

Javascript Express.js跨域会话未保存,javascript,node.js,express,express-session,Javascript,Node.js,Express,Express Session,我正在尝试制作一个第三方应用程序,这意味着它将跨多个域运行。 我想为使用该应用程序的每个用户处理一个会话,因此,我使用了express session模块,但每次我发出请求时,它都会为当前请求启动一个新会话 const express=require('express'), 路由器=express.router(); const session=require('express-session') 路由器使用(功能(req、res、next){ res.header('Access-Contro

我正在尝试制作一个第三方应用程序,这意味着它将跨多个域运行。 我想为使用该应用程序的每个用户处理一个会话,因此,我使用了express session模块,但每次我发出请求时,它都会为当前请求启动一个新会话

const express=require('express'),
路由器=express.router();
const session=require('express-session')
路由器使用(功能(req、res、next){
res.header('Access-Control-Allow-Credentials',true);
res.header(“访问控制-允许-来源”,请求标题-来源);
res.header('Access-Control-Allow-Methods','GET、PUT、POST、DELETE');
res.header('Access-Control-Allow-Headers','X-request-With,X-HTTP-Method-Override,Content-Type,Accept');
next();
});
路由器。使用(会话)({
秘密:“键盘猫”,
雷萨夫:是的,
最大值:2*60*60*1000,//2小时
saveUninitialized:false,
曲奇:{
最大值:2*60*60*1000,
安全:错误,
sameSite:错,
httpOnly:false}
}))
router.get('/',函数(req,res,next){
//让payload=req.query;
设isDevClient=req.session.isDevClient | | false;
console.log('isNew?',isDevClient);
资源状态(201)。发送({
成功:没错,
isDevClient,
消息:“msg…”
});
}).post(“/”,函数(请求、恢复、下一步){
让有效载荷=请求主体;
console.log('isNew',req.session.isDevClient)
req.session.isDevClient=true;
资源状态(200)。发送({
成功:没错,
信息:“好的”
});
});
module.exports=路由器;
请求示例

//javascript
取('https://127.0.0.1:8443/',{
方法:“张贴”,
凭据:“包括”,
})
//Jquery
$.ajax({
'type':'post',
“url”:”https://127.0.0.1:8443',
“xhrFields”:{
'withCredential's:true
}
“成功”:函数(响应){},
})
``

使用
凭据:“在
获取
调用中包括”
,否则
获取
在跨域请求期间不会发送cookie。例如:

fetch(..., {
   ...,
   credentials: 'include' 
}
更新:如果未设置SameSite属性,最近的Chrome版本似乎不会在跨域请求期间发送cookie

设置
sameSite:“无”
应该可以修复它。请注意,chrome还要求这些cookie是安全的


顺便说一句,您可以很容易地使用repl.it(like)提供示例。

使用
凭据:“在
获取
调用中包括”
,否则
获取
在跨域请求期间不会发送cookie。例如:

fetch(..., {
   ...,
   credentials: 'include' 
}
更新:如果未设置SameSite属性,最近的Chrome版本似乎不会在跨域请求期间发送cookie

设置
sameSite:“无”
应该可以修复它。请注意,chrome还要求这些cookie是安全的



顺便说一下,您可以很容易地用repl.it(like)提供示例

您确定saveUninitialized应该为false吗?我认为这就是问题所在,因为您的会话不是savedI。在它与现在一样之前,我已经尝试过实现它……您是如何提出请求的?提供一个。您是否在响应中看到
Set Cookie
标题?浏览器是否在下一个请求中发送cookie?查看浏览器开发工具中的“网络”选项卡,我通过简单的ajax或fetch发出请求。我在chrome dev toolsHey man的网络tad中看到
响应头中的
Set Cookie
头,你知道吗?我遇到了相同的问题。您确定saveUninitialized应该为false吗?我认为这就是问题所在,因为您的会话不是savedI。在它与现在一样之前,我已经尝试过实现它……您是如何提出请求的?提供一个。您是否在响应中看到
Set Cookie
标题?浏览器是否在下一个请求中发送cookie?查看浏览器开发工具中的“网络”选项卡,我通过简单的ajax或fetch发出请求。我在chrome dev toolsHey man的网络tad中看到
响应头中的
Set Cookie
头,你知道吗?我也遇到了同样的问题。我用过它,它会在原始的postAh上显示一个例子,我想你有一个更新版本的chrome,如果没有SameSite属性,它不会发送cookie。我将更新我的回答我已经更改了服务器端的
sameSite:“none”
,但它似乎不起作用。您注意到
安全部分了吗?应该改成是的这就是我现在的<代码>路由器。使用(会话({secret:'keyboard cat',resave:true,maxAge:2*60*60*1000,//2小时saveUninitialized:false,cookie:{maxAge:2*60*60*1000,secure:false,sameSite:'none',httpOnly:false}))
我已经使用过它,它将在原始postAh上显示一个示例,我猜你有一个更新版本的chrome,如果没有SameSite属性,它不会发送cookie。我将更新我的回答我已经更改了服务器端的
sameSite:“none”
,但它似乎不起作用。您注意到
安全部分了吗?应该改成是的这就是我现在的<代码>路由器。使用(会话({secret:'keyboard cat',resave:true,maxAge:2*60*60*1000,//2小时saveUninitialized:false,cookie:{maxAge:2*60*60*1000,secure:false,sameSite:'none',httpOnly:false}))