lzn970721 发表于 2020-1-20 13:07

前后端分离cookie获取不到

springboot项目,登录时在cookie存储用户id,请求时获取,退出时清除,在前后端分离之前都是好用的,前后端分离之后就存储不了cookie了,F12发现请求头里没有cookie,用的jQuery的Ajax请求,同一服务器,同一域名,同一IP,应该没跨域吧,Ajax添加xhrFields:{withCredentials: true}也一样,求助大神{:1_908:},请求头见图

登录请求(分离前)
https://attach.52pojie.cn//forum/202001/20/130248tjp6kwtaepnwyn4u.png?l


登录请求(分离后)
https://attach.52pojie.cn//forum/202001/20/130354k720oc1oofvw92ov.png?l


读取用户信息(分离前)
https://attach.52pojie.cn//forum/202001/20/130516teg4gapuap04y5ga.png?l


读取用户信息(分离后)
https://attach.52pojie.cn//forum/202001/20/130557ry2ksnlsksgm2fku.png?l

感觉不到风 发表于 2020-1-20 13:20

你是不是把获取cookie写在了后端的controller层 写在前端不就完了 后端获取cookie

lzn970721 发表于 2020-1-20 13:23

感觉不到风 发表于 2020-1-20 13:20
你是不是把获取cookie写在了后端的controller层 写在前端不就完了 后端获取cookie

是的 在登录的时候用Java的Cookie对象创建写入的 查看浏览器cookie已经写入了 就是后端获取不到cookie,在请求用户信息的时候后端先看看cookie存不存在,而且增加了过滤器,每次请求都刷新cookie的过期时间

魔幻冰扬 发表于 2020-1-20 13:58

个人愚见(纯前端,不懂Java):
前后端没没分离之前,你Java应该能给浏览器写入cookie,而且可以直接用Java从浏览器获取cookie。
但是前后端分离后,Java只负责服务端,基本上不能从浏览器直接获取cookie了。
前后端分离项目的处理逻辑是:登录成功后,后端把token,返给前端,前端自己去存储到cookie,以后的每次请求,前端在ajax的请求header中都带着这个token。
后端的校验token,就不是直接从cookie获取了,而是从每次请求的header中获取。
一般前端也会封装ajax,把token封装到header中。
所以,你这个问题,应该是看看前端ajax的header中有没有带着这个token。可能是前端请求问题,不是后端问题。

lzn970721 发表于 2020-1-20 14:00

魔幻冰扬 发表于 2020-1-20 13:58
个人愚见(纯前端,不懂Java):
前后端没没分离之前,你Java应该能给浏览器写入cookie,而且可以直接用Ja ...

请求头中确实没有cookie 没分离的时候请求头里有cookie 分离之后请求头中少了很多东西

感觉不到风 发表于 2020-1-20 14:02

lzn970721 发表于 2020-1-20 13:23
是的 在登录的时候用Java的Cookie对象创建写入的 查看浏览器cookie已经写入了 就是后端获取不到cookie, ...

后端的web层 可以在reqeust里面获取token的 估计你获取写错代码了还有一种可能性就是过滤给过滤掉了 因为一般springboot实现都自动过滤删除掉token 要设置一个xml

魔幻冰扬 发表于 2020-1-20 14:03

lzn970721 发表于 2020-1-20 14:00
请求头中确实没有cookie 没分离的时候请求头里有cookie 分离之后请求头中少了很多东西
分离后,header中的东西,都应该前端传过来,而不是后端自己去set。你问问前端的有没有传过来

桂小四123 发表于 2020-1-20 14:07

思路才是关键既然前后端分离了 还在研究cookie干嘛呢为嘛不看看用JWT方案呢

魔幻冰扬 发表于 2020-1-20 14:07

这是我们项目的ajax封装,authorization就相当于鉴权token,已经封装到ajax中了,每次请求,都从cookie中获取。

alxe1528 发表于 2020-1-20 14:20

springboot, 好像是不会生成cookies的
页: [1] 2
查看完整版本: 前后端分离cookie获取不到