前些天,操作cookie时,遇到了点儿小问题,某个功能需要自动退出用户登陆状态,此时,清除 cookie的代码失效了,而用于提供用户手动退出功能的同一段代码,确工作正常。奇哉怪哉!
ok,firefox,出列!让我们并肩作战,披荆斩棘,勇往直前,一往无前……
地球人都知道,servlet的response对象只有addCookie方法,清除cookie是通过设定过期时间来完成的。不过,却很少有人知道,或者说,即便知道,也很少关心,cookie的path。
通常,对于没有设定path的cookie,其默认值为设置该cookie的URL的path,例如,由http://www.fei2000.cn /java/sample.jsp页所设定的cookie,其path为/java/,该cookie对java及其子目录下的jsp页面均可见,对于其他目录下的页面则不可见。显然,由/java/sample.jsp和/sample/sample.jsp所设定的同名cookie,并不是同一个 cookie,他们互相不可见,互不干扰。
由此,引出了此次事故的元凶,cookie并不是由name唯一确定的,而默认的path,随着操作cookie的页面URL不同而不同。由于子页面可以获取父页面设定的cookie,很容易造成一个错觉,这2个cookie是同一个!可惜,事与愿违。
子页面需要修改或者清除父页面设置的cookie时,需要显式的指定path,不然,只是发送了一个同名不同path的cookie而已。
这个故事告诉我们,偷懒是不对滴,指定path才是好习惯!