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的设置将是无效的,就像下面这样。

config.cookies = {
    httpOnly:true,
    sameSite:"None",
    secure:true
  }

但是问题来了,将secure设置为true意味着我们需要使用https协议来实现前后端通信,这在开发环境下(至少是对于我来说)显然是多此一举的,所以这个办法是行不通的。

有教程提示可以从浏览器下手,通过修改chrome的配置来让浏览器忽略对跨域cookie的限制,在chrome的地址栏输入

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),如下,

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设置成功了,但是我目前不明白其中缘由,如果你也遇到了了同样的情况也可以试试,知道原因的话也希望你能帮我解答,感谢。

posted @ 2022-07-25 16:17  Malign  阅读(641)  评论(0编辑  收藏  举报