Cookie path问题

问题:云上的应用,因为经过了网关,因此其实际URL中的IP:PORT/ 后面紧跟的不是应用部署在tomcat服务器上的上下文根(也就是war的名称),导致使用cookie记录用户信息失败。

原理:

  1. tomcat服务器默认给cookie添加path,path的值是应用的上下文根,也就是war的名称,如果给war改名为ROOT.war,那么上下文根默认为/,同时这里cookie的path也默认为/
  2. tomcat服务器提供了一个配置参数,位于context.xml里面,元素的属性sessionCookiePath="/",可以通过配置文件,而不是修改war的名称来解决这个问题。

Apache Tomcat® - Migration Guide - Tomcat 7.0.x
idea下面开发的项目 部署到tomcat下面 cookie path 有跨域问题 已经解决_qq_27327261的博客-CSDN博客_idea tomcat 跨域
改变JSESSIONID Set-Cookie的 Path - 持续疯长,往天那边去 - ITeye博客

  1. 浏览器接受到服务器的set-cookie命令后,会将cookie保存到本地,后续请求的时候带上;
  2. 浏览器往请求里面添加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。

你可能感兴趣的:(Cookie path问题)