cookie的path值的默认规则

2023-11-07

在项目中有时需要用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设置为”/”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cookie的path值的默认规则 的相关文章

随机推荐

  • cmd命令行访问远程mysql数据库

    示例 mysql uhello pworld h 192 168 1 88 P 3306 D mysql oa mysql u用户名 p密码 h 远程数据库IP地址 P 端口 D 数据库名 连接成功后就可以想操作本地数据库一样了 感觉是不是
  • 现在完成时

    定义一 过去做的动作或状态 导致现在 如果时态是 现在完成时 have has v过去分词 当主语是第三人称单数时使用 has 我已经看过这部电影了 let s watch another movie i have already seen
  • SQL查询in大于1000处理

    近期在代码开发中 发现某些业务场景因为多个服务的调用查询 避免不了使用in 当in的数量小于1000的时候 可以正常使用 但是当in的数量大于1000的时候就会出现报错 针对此类问题主要有两个场景 1 使用Mybatis在XML中写SQL
  • 解决npm 乱报错

    使用npm 下载vue socket io npm报路径错误 解决方案 删除npmrc文件 强调 不是nodejs安装目录npm模块下的那个npmrc文件 而是在C Users 账户 下的 npmrc文件 注意 这个文件默认是被隐藏 一定要
  • gdb+vscode进行调试1——使用CMakelist文件进行编译和调试+附加进程调试

    1 建立工程文件 文件树如下 2 make sh脚本文件如下 bin bash cmake make 重要 必须添加权限 sudo chmod x make sh 3 CMakelist文件如下 cmake minimum required
  • Qt程序发布(Qt6.2.2+MinGW11.2.0+win10)

    前言 近几天 又有小伙伴问我程序发布的事 这个问题本不复杂 但对一个新手来说 还是有点难度的 为此 笔者简单介绍下Qt在windows下 发布程序的一般方法 本次以Qt6 2 2 MinGW11 2 0 win10为例 其他版本的方法类似
  • undo日志insert,update,delete (1)—mysql进阶(六十四)

    前面说了redo日志为了保证系统宕机的情况下 能够恢复数据 恢复数据是在以checkpoint lsn为起始位子来恢复 在该值之前的都是已经持久化到磁盘的 可以为了提升效率而放弃 而之后的数据 也可能在checkpoint之后 被后台异步运
  • mysql如何获取当前时间_mysql怎么获取当前时间

    mysql获取当前时间的方法 可以通过执行 select now 语句来获取当前时间 还可以通过执行 select current timestamp current timestamp 语句来获取 获得当前日期 时间 date time
  • ordfilt2函数功能说明

    转自 http www ilovematlab cn thread 91331 1 1 html ordfilt2函数在MATLAB图像处理工具箱中提供了二维统计顺序滤波函数ordfilt2函数 二维统计顺序滤波是中值滤波的推广 对于给定的
  • 对于强化学习的梳理

    强化学习 增强学习 概述 知识联系 强化学习是属于机器学习的一种 机器学习主要分监督学习 非监督学习 半监督学习 增强学习 强化学习的核心逻辑 那就是智能体 Agent 可以在环境 Environment 中根据奖励 Reward 的不同来
  • C语言学习打卡第8天

    一 函数第二部分的练习 1 有3 4的矩阵 初始化他并输出 还求出最大值输出 include
  • 计算机视觉算法——目标检测网络总结

    计算机视觉算法 目标检测网络总结 计算机视觉算法 目标检测网络总结 1 RCNN系列 1 1 RCNN 1 1 1 关键知识点 网络结构及特点 1 1 2 关键知识点 RCNN存在的问题 1 1 3 关键知识点 非极大值抑制算法 NMS 1
  • JAVA笔记_(Day04,Day05)函数&数组

    文章目录 函数 定义 练习 误区 重载 overload 重载选择题练习 函数的内存调用问题 数组 定义 数组的内存图解 数组的常见问题 应用 求和 最大值 将数组转成字符串 查表法 转十六进制 查表版 十六进制终极版 十进制转二进制 进制
  • Linux上搭建Jenkins

    Linux上搭建Jenkins 下面给出Linux上搭建Jenkins的环境 教你一步步搭建起来 1 Jenkins下载 Jenkins 下载网址 Download Jenkins Jenkins 最新版本 jenkins 1 514 al
  • ARM平台基于嵌入式Linux使用MIPI CSI-2接口

    标签 ARM Linux MIPI Camera NXP nVidia Toardex Apalis By Toradex 秦海 http www eefocus com toradex blog 16 05 384885 f19b5 ht
  • 最近学到的一些前端知识

    在Vue中使用v for不仅可以遍历数组 还可以遍历对象 当然也可以遍历字符串 还有在Vue中 不可以深度监听数组的变化 比如将数组arr某一项的值改变 在视图上不会发生变化 在网上找了很多方法 包括Vue set 原对象 位置 值 以及v
  • 文件上传漏洞upload-libs pass2

    文件上传漏洞upload libs pass2 首先查看源码 发现是后端PHP过滤 仅允许类型为image jpeg image png image gif的文件上传 将一句话木马的后缀改为jpg 上传图片并抓包 Send to Repea
  • 浅谈CUDA零拷贝内存

    今天看到有小伙伴提出了 零拷贝 的问题 由于本人以前用的也比较少 了解不多 因此打算好好研究一番 现做些总结 零拷贝内存是一种特殊形式的内存映射 它允许你将主机内存直接映射到GPU内存空间 因此 因此对GPU上的内存解引用时 如果是基于GP
  • word2010 数学公式/联立方程/大括号内方程组如何左对齐?

    如何在word中输入的联立方程使其条件左对齐 如输入 实现如下对齐 就是在每个逗号 前输入一个 号就可以了 注意这个逗号一定要是
  • cookie的path值的默认规则

    在项目中有时需要用cookie来保存用户信息 不论是在js代码还是java代码中 很多时候我们都只设置了cookie的name value和maxAge 而没有去管path 例如下面的 代码块1 是当一个用户首次访问网站的时候添加一个coo