代码如下:
Cookie cookie = new Cookie("JSESSIONID", session.getId()); cookie.setMaxAge(30*60); cookie.setPath("/Servlet"); resp.addCookie(cookie);
Tomcat的Application context设置是 /
1.今天在一个项目中遇见怎样一个情况,设置了cookie的生存时间为60*30,设置cookie.setPath("/Servlet");在测试是发现一个问题,按理来说,在cookie的生命期内,重新关闭浏览器在进行访问,cookie是可以保存数据的,但是确实没有把数据保存下来,更离谱的是该cookie还被注销了。
2.于是我就尝试解决这个问题,首先我的直觉告诉我既然是浏览器上cookie被注销了,那问题很大可能出在浏览器,于是查找浏览器cookie设置,一无所获。
所以我考虑从代码出发,试试看。
首先,修改cookie.setMaxAge(30);
我就想知道到底cookie生命时间设置有没有生效,结果没有生效,时间超过30秒后,该cookie还没有被注销,说明时间的多少不是决定性因素。
第二步,修改cookie.setPath("/Servlet")-->cookie.setPath("/")
结果正确,当第一次访问是,记录我现在的数据,关闭浏览器,重新访问URL,展示的还是我之前选择的结果。这就是自己想要的效果。所以原因找到了。
3.具体测试过程如下:
4.扩展:
我还是想知道在什么情况情况下,cookie.setPath("/Servlet")才会生效,于是上网查找资料,关于cookie.setPath()的用法,网上是这样解释的:
总结上图来说:就是要让cookie.setPath("/Servlet")生效,那么就要在Tomcat的Servlet应用下才能获取cookie,于是我尝试修改Tomcat的Application context设置为/Servlet :
进行测试,效果和Application context设置为 / 且cookie.setPath("/")一样的。
5.结论:
cookie要生效,cookie.setPath("/")要和Tomcat的Application context设置一起配合使用,不然就会出现cookie设置不起作用的情况。