egg框架对session设置失效的问题
我在使用egg配置session/cookie时遇到了一些问题,这里说一下。
用户登陆时我希望通过egg返回一个session用来记录用户的身份,对于session/cookie的配置egg官网有详细的解答(https://www.eggjs.org/zh-CN/core/cookie-and-session)。
我这里配置好后用过chrome查看cookie,发现session是没设置上的。network页面查看响应头可以发现set-cookie关键字是有个警告的(This Set-Cookie header didn't specify a "SameSite" attribute and was defaulted to "SameSite=Lax," ...),提示我们通过修改cookie的samesite属性来允许跨域的服务端设置cookie。我们需要把这个samesite属性设置为“None”,同时你还需要把secure设置为true,否则你对samesite的设置将是无效的,就像下面这样。
1 2 3 4 5 | config.cookies = { httpOnly: true , sameSite: "None" , secure: true } |
但是问题来了,将secure设置为true意味着我们需要使用https协议来实现前后端通信,这在开发环境下(至少是对于我来说)显然是多此一举的,所以这个办法是行不通的。
有教程提示可以从浏览器下手,通过修改chrome的配置来让浏览器忽略对跨域cookie的限制,在chrome的地址栏输入
1 | chrome: //flags/#same-site-by-default-cookies |
将SameSite by default cookies属性设置为disabled。不过2022年的大伙大概率是找不到这个属性的,因为chrome在91版本后移除了该属性,我们需要下载老版的chrome,可惜官网没有提供老版的下载,你可以通过这里下载到更早的版本(https://www.slimjet.com/chrome/google-chrome-old-version.php)。设置完毕后服务端设置cookie就正常了。
可惜我在完成上述步骤后cookie仍没有正常保存,查找一番后有人提示可以修改egg跨域的配置,将localhost改成对应的127.0.0.1(我的前端地址是localhost:8080/127.0.0.1:8080),如下,
1 2 3 4 5 | config.cors={ origin: 'http://127.0.0.1:8080' , allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS' , credentials: true , //允许请求携带cookie } |
然后通过ip(127.0.0.1:8080)地址访问你的前端项目即可。
我试了下最终cookie设置成功了,但是我目前不明白其中缘由,如果你也遇到了了同样的情况也可以试试,知道原因的话也希望你能帮我解答,感谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构