美文网首页WEB学习笔记
cookie的path值的默认规则

cookie的path值的默认规则

作者: 赵客缦胡缨v吴钩霜雪明 | 来源:发表于2019-03-27 18:02 被阅读0次

今天遇到一个Cookie的问题,cookie的path不是 '/',导致一些页面不能共享Cookie。之前没有遇到过这个问题,今天就查了查。

在项目中有时需要用cookie来保存用户信息,很多时候我们都只设置了cookie的name、value和maxAge,而没有去管path。

path取值是有默认规则的,下面总结一下paht取值的规则。

总结一下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是当一个用户首次访问网站的时候添加一个cookie(假设网站的域名是www.a.com)用来表示用户是未登录的新用户。

代码1

.........过滤器中其他代码,判断用户是否首次访问网站........
Cookie newVisitorCookie = new Cookie("new_visitor", "yes");
newVisitorCookie.setMaxAge(-1);
newVisitorCookie.setDomain("www.a.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是java.net.CookieManager类中当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);
      }
 ...............其他代码................

相关文章

  • cookie的path值的默认规则

    今天遇到一个Cookie的问题,cookie的path不是 '/',导致一些页面不能共享Cookie。之前没...

  • Cookie特性详解

    cookie的几个属性:expire:cookie的生存期,默认是暂时存储path:cookie的关联网页,默认是...

  • cookie

    cookie的组成: key:键 value:值 domain:域,表达这个cookie是属于哪个网站的 path...

  • mac PATH环境变量

    PATH环境变量恢复默认值

  • 跨域名的cookie技巧

    cookie编码注意 cookie的有效期 cookie的domain和path属性: 1、domain 2、path

  • 2021-05-18

    正确使用 cookie 的 path cookie 有路径--path,表示哪些路径下的文件有权限读取该 cook...

  • cookie

    cookie 的属性cookie属性:name、value、expires、domain、path、secure、...

  • js 和 flask设置cookie, 默认path

    在设置cookie时遇到的一个坑:用的flask写了一个web demo,我在js代码里设置了cookie,用fl...

  • WKWebview ajax添加cookie

    wkwebview 用WKUserScript添加cookie,cookie的source里必须带上 path

  • Nginx|nginx的文件路径配置(root&alia

    语法 root 语法:root path默认值:root html配置段:http、server、location...

网友评论

    本文标题:cookie的path值的默认规则

    本文链接:https://www.haomeiwen.com/subject/vcozvqtx.html