Cookie path问题
2022-04-27 本文已影响0人
CokeCode
问题:云上的应用,因为经过了网关,因此其实际URL中的IP:PORT/ 后面紧跟的不是应用部署在tomcat服务器上的上下文根(也就是war的名称),导致使用cookie记录用户信息失败。
原理:
- tomcat服务器默认给cookie添加path,path的值是应用的上下文根,也就是war的名称,如果给war改名为ROOT.war,那么上下文根默认为
/
,同时这里cookie的path也默认为/
。 - tomcat服务器提供了一个配置参数,位于context.xml里面,
<Context>
元素的属性sessionCookiePath="/"
,可以通过配置文件,而不是修改war的名称来解决这个问题。
Apache Tomcat® - Migration Guide - Tomcat 7.0.x
idea下面开发的项目 部署到tomcat下面 cookie path 有跨域问题 已经解决_qq_27327261的博客-CSDN博客_idea tomcat 跨域
改变JSESSIONID Set-Cookie的 Path - 持续疯长,往天那边去 - ITeye博客
- 浏览器接受到服务器的
set-cookie
命令后,会将cookie保存到本地,后续请求的时候带上; - 浏览器往请求里面添加cookie的时候,会判断path是否匹配,只有匹配的path的时候,才会带上对应的cookie。
Set-Cookie - HTTP | MDN (mozilla.org)
由于浏览器和tomcat的上述特性,比如一个应用,上下文根 /xxx,那么tomcat默认返给浏览器的cookie的path就是xxx
,如果实际访问的URL是:IP:PORT/xxx 来访问这个应用,那浏览器就会带着cookie,因为path匹配正确。
但是如果是云上应用,由于网关对URL进行了处理,使得应用的实际URL是 IP:PORT/zzz/yyy/xxx 这种形式,此时浏览器就匹配不了,此时它向这个地址发请求的时候,就不会带着path 值为xxx的cookie。