需求背景
服务器向外网统一映射了一个固定的上下文,导致程序在部署之后,上下文与测试环境不一致,变成了双层的上下文。开发:/context ,生产:/server/context 。
微信H5网页在部署到正式环境之后,每次请求的sessionid都不一致,在测试环境sessionid无影响。
故障排查
本次的前端程序是放置在微信公众号的H5网页采用VUE编写,在查资料之后有很多帖子说微信内嵌的浏览器会导致sessionid丢失,是因为微信的请求会经过微信的服务器转发,然后到程序的部署服务器是经过多层代理的,所以上下文不一样。但这些好像是小程序走的流程,网页应该还是直接访问的服务器,所以不应该出现上述问题。
在看请求的过程中,发现微信开发者工具在返回到前端,设置cookie的Path的时候不对劲,因为开发环境是单层的上下文,生产环境被嵌套之后导致返回的Path还是单层的,导致返回设置的cookie的上下文与实际的不符合,所以每次请求的cookie都不一致。
解决办法
找到原因后,springboot设置。
server.servlet.session.cookie.path=/server/context
如果不生效在启动时增加参数。
nohup java -jar -Xms256m -Xmx512m -XX:MetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home /data/你的war包名.war --server.servlet.session.cookie.path=/server/context > /dev/null 2>&1 &