cookie的path值的默认规则

在项目中有时需要用cookie来保存用户信息,不论是在js代码还是java代码中,很多时候我们都只设置了cookie的name、value和maxAge,而没有去管path。
例如下面的“代码块1”是当一个用户首次访问网站的时候添加一个cookie(假设网站的域名是www.csdn.com)用来表示用户是未登录的新用户。

代码块1

.........过滤器中其他代码,判断用户是否首次访问网站........
Cookie newVisitorCookie = new Cookie("new_visitor", "yes");
newVisitorCookie.setMaxAge(-1);
newVisitorCookie.setDomain("www.csdn.com");
response.addCookie(newVisitorCookie);
.........其他代码...........

在java代码里面通过name为“new_visitor”的cookie来判断用户是否是首次访问。
通过测试发现有些用户虽然是首次访问网站,但是在java代码里面却获取不到“new_visitor”的cookie。经过排查才发现原来是cookie中path属性的问题。
path表示cookie所在的目录。”/”表示根目录,所有页面都能访问根目录下面的cookie。如果cookie的path为test,那么只test目录下或者是test下的子目录的页面和代码才获取到这个cookie。
查看了一下添加cookie的源代码才发现,当cookie的path为null的时候,会自动设置path的值。

代码块2

...............其他代码................
for (String headerValue : responseHeaders.get(headerKey)) {
 try {
  List<HttpCookie> cookies = HttpCookie.parse(headerValue);
  for (HttpCookie cookie : cookies) {
     if (cookie.getPath() == null) {
         // If no path is specified, then by default
         // the path is the directory of the page/doc
         String path = uri.getPath();
         if (!path.endsWith("/")) {
            int i = path.lastIndexOf("/");
            if (i > 0) {
               path = path.substring(0, i + 1);
             } else {
               path = "/";
            }
         }
         cookie.setPath(path);
      }
      ...............其他代码................

代码块2是java.net.CookieManager类中当cookie的path为null时,设置path值的规则。

总结一下paht取值的规则:

  1. 当cookie的path设置了值不为null的时候,以设置的值为准。
  2. 当cookie的path为null时候,获取请求的URI的path值
    1. 当URI的path值是以“/”结尾的时候,直接设置为cookie的path值
    2. 当URI的path值不是以“/”结尾的时候,查看path里面是否有“/”
      1. 如果有“/”的话,直接截取到最后一个“/”,然后设置为cookie的path值。
      2. 如果没有“/”的话,将cookie的path设置为”/”。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值