怎么制作网站横幅百度搜索引擎的功能
文章目录
- 一,首页无用户信息
- 二,定位
- 三,两个问题
- 1,跨域名session共享
一,首页无用户信息
谷粒商城首页,点击超链接您好,请登录
,正常情况下应该跳转到Auth模块的login页面,登录成功后,会重定向到首页,超链接您好,请登录
应该替换为用户名。
但是实际开发过程中出现了这样一个问题,登录成功后,超链接您好,请登录
未被替换,再次点击这个超链接,不会跳转到登录界面,说明后台认为已经登录成功,直接重定向到首页了,但是首页没有拿到用户信息。
F12查看Application信息,也没有发现session
和cookie
信息。
二,定位
梳理登录流程,看看问题可能出现在哪个环节。
- 首页点击超链接
您好,请登录
- 跳转到
auth.gulimall.com/login.html
,这里很关键,商城用户认证模块的域名和首页域名不一致 - 认证模块完成用户验证后,将用户信息保存在
session
中 auth
模块的前端页面login.html
将session
信息保存在cookie
中,注意是保存在域名auth.gulimall.com
下- 重定向到首页,首页的域名是
gulimall.com
,所以不会携带cookie
信息,首页后端拿不到用户信息,无法渲染页面
解释问题原因:
- 登录功能是两个模块协同完成的,登录模块完成登录,在域名
auth.gulimall.com
下保存cookie
- 用户信息保存在认证服务的
session
中,首页模块的前端拿不到cookie,及时拿到了cookie
,也拿不到session
,因为session保存在auth认证服务的内存中,没有保存在首页所在的商品服务内存中,取不到用户信息。
下图可以看到auth.gulimall.com
下是有cookie
保存的。
三,两个问题
1,跨域名session共享
父域名获取不到子域名的cookie,这个可以在后台定制cookie,把域名的cookie设置为父域名。
Cookie cookie = new Cookie("JSESSIONID", session.getId());cookie.setPath("/");cookie.setDomain("gulimall.com");servletResponse.addCookie(cookie);
注意,cookie
的name
、domain
、path
是非空的信息。
这样设置之后,在首页就能看到父域名有cookie
信息了。
即便如此,首页在渲染时仍然拿不到用户信息,因为用户session
信息保存在auth
任务服务的内存中,首页所在的product
服务是访问不到的。
还必须解决跨服务session共享问题。