在使用cookie时发现不同页面获取到的同一个cookie变量的值不同,本篇博客介绍其中一种情况的解决方法,通过设置path的方法可使得在同一个网站下获取的cookie变量一致。


问题描述

在www.xxx.com/a.html下获取cookie变量var的值和在www.xxx.com/y/b.html下获取cookie变量的值不一样,或者在a页面调用js/jquery修改了cookie变量var的值,但是在b页面获取的是未修改的值。

问题原因

通常情况下造成此种问题的原因是cookie变量保存的path域不同,在设置cookie变量的值时,若未指定cookie保存的path域,浏览器会默认将cookie变量保存在当前域下,调用cookie变量时会从当前path目录下寻找,而不会向父目录寻找。

举个例子,如在www.xxx.com/y/b.html下有一个cookie变量var,则在www.xxx.com/y/c.html下也可以获取到变量var的值,但是在www.xxx.com/a.html或者www.xxx.com/z/d.html无法获取该值

问题分析

想要查看网站cookie,需要先进入开发者工具,下面以Google为例

或者直接在页面右键选择检查

显示如下页面后选择Application

选择cookie下的网站即可在绿色区域看到当前网站下的cookie信息,导致问题出现的原因主要就是未设置path

问题演示

此处以本人的博客༺ཌ༈君☠纤༈ད༻为例,最近添加了Day和Night两种主题,信息保存在cookie变量的AsionTheme变量中,0为Day主题,1为Night变量

刚开始出现的问题是在首页选择的主题样式在文章详情页不会同步显示,从cookie信息可以看出首页切换主题时AsioTheme的value值发生变化,Path值为/asio

文章页切换主题时,多了一个AsioTheme变量,path为/asio的变量value不会变化,path为/asio/p的变量value发生变化

由上面两个图对比可知,问题的原因为cookie变量的path值不同,所以只需要在设置cookie变量时,设置好path的值即可解决这个问题

上述setCookie为封装好的方法,只需指定path值即可,/为根目录,作用于整个www.xxx.com网站,此处设置为/asio,在我的博客下cookie值将都是统一的了

解决方法

为了控制cookie可以访问的目录,需要使用path参数设置cookie,具体的cookie使用方法此处不再赘述,如下为js设置cookie的一个例子

例如js的语法为
document.cookie="name=value; path=cookieDir"; 其中cookieDir表示可访问cookie的目录。
例如: document.cookie="userId=320; path=/shop"
设置的cookie变量userId值为320,path路径为/shop,即userId作用于www.xxx.com/shop及其所有子目录如www.xxx.com/shop/a/index.html

本博客与CSDN博客༺ཌ༈君☠纤༈ད༻同步发布

不同页面获取同一cookie变量值不同的问题及解决方法的更多相关文章

  1. php怎么获取js的变量值

    使用php做网站的时候,经常需要我们与前端的页面进行交互,有时候我们还需要通过php来获得js变量中的值,这种情况我们可以通过在其中嵌入js代码的方式来获得这个变量. 首先我们创建一个test的php ...

  2. ORACLE获取SQL绑定变量值的方法总结

      本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅. 方法1:查询V$SQL V$SQL视图中 ...

  3. Orabbix无法获取Oracle DB Size和DB Files Size的解决方法

    Orabbix无法获取Oracle DB Size和DB Files Size的解决方法 这几天在研究Orabbix时发现在Zabbix中无法获取DB Size和DB Files Size的大小,后来 ...

  4. Django 使用getattr() 方法获取配置文件的变量值

    在django项目的开发过程中,有时需要获取配置文件里的变量值,可以通过下面这样的方式去进行获取 from django.conf import settings item = getattr(set ...

  5. EL表达式无法获取boolean类型变量值

    今天调试个程序, 有个名为isAdmin的boolean类型的变量在jsp页面获取到的值为空, 这根本就是没获取到或者变量不存在的状况啊,但是在Action中明明是赋值成false了. 上网查了一下有 ...

  6. 移动端页面以rem为单位设置字体大小不生效解决方法

    这个问题在前端H5页面开发可以说是一个老生常谈的问题了.由于以前所有遇到的问题以及解决方法都会以文档的形式记录在电脑里,而非github或者blog,所以现在才一点一滴的整理上来,就当是一个心路历程吧 ...

  7. el表达式无法获取springmvc的model封装好的数据之解决方法

    近日碰到奇怪的问题,应该挺好解决的,可是就是卡住我两天 下面我来描述一下问题 用的是springmvc,自然需要controller,假设我现在所有的配置都是对的. controller代码 @Req ...

  8. spring mvc 中自定义404页面在IE中无法显示favicon.ico问题的解决方法。

    此处用的是jsp,控制层用的是ModelAndView, 具体解决方法如下: @RequestMapping(value = "notfound", method = Reques ...

  9. ios系统微信浏览器、safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法

    一. 运行环境: iphone所有机型的qq浏览器,safari浏览器,微信内置浏览器(qq浏览器内核)等. 二. 异常现象: 1. 大幅度上下滑动h5页面,然后停止滑动,有时候会影响到页面滚动,如局 ...

随机推荐

  1. Hadoop之HDFS扩容方法

    HDFS就是用来存取数据的,那么当数据太多的时候存不下,我们必需扩充硬盘容量,或者换个更大的硬盘. 由于它是分布式文件系统,有两种扩充HDFS集群容量的方法:横向扩容和纵向扩容 横向扩容 横向扩容就是 ...

  2. opencv —— boundingRect、minAreaRect 寻找包裹轮廓的最小正矩形、最小斜矩形

    寻找包裹轮廓的最小正矩形:boundingRect 函数 返回矩阵应满足:① 轮廓上的点均在矩阵空间内.② 矩阵是正矩阵(矩形的边界与图像边界平行). Rect boundingRect(InputA ...

  3. TensorFlow安装-(Ubuntu18.04.3 & Anaconda3)

    1.背景 使用ubuntu18.04.3安装Anaconda3之后使用网上教程安装tensorflow失败,踩了多个坑,特此总结经验 附官方教程:https://tensorflow.google.c ...

  4. Linux-开发环境安装

    JDK安装: 执行: yum -y list java* 展示所有的javajdk 安装jdk: yum install -y java-1.8.0-openjdk-devel.x86_64 1.8. ...

  5. c#XML的基本使用

    创建XML文档 static void Main(string[] args) { //1.引入命名空间 //2.创建XML文档对象 XmlDocument xmldoc = new XmlDocum ...

  6. The ADB binary found at ... 虚拟机运行错误

    虚拟机问题,可以说差点扼杀我开发 APP 的乐趣,哼,最后请教了一下辉哥(学长),终于解决 —— 用真机调试.下面是步骤: 首先,检查一下真机连接需要的 SDK 是否安装,未安装,勾选进行安装 接着用 ...

  7. P1422 小玉家的电费(scanf,printf)

    题目描述 夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了.小玉家今天收到了一份电费通知单.小玉看到上面写:据闽价电[2006]27号规定,月用电量在 150 千瓦时及以下部分按每千瓦时 ...

  8. 【新人赛】阿里云恶意程序检测 -- 实践记录 11.24 - word2vec模型 + xgboost

    使用word2vec训练词向量 使用word2vec无监督学习训练词向量,输入的是训练数据和测试数据,输出的是每个词的词向量,总共三百个词左右. 求和:然后再将每行数据中的每个词的词向量加和,得到每行 ...

  9. PHP Strings

    <?php //1. how to use mail function //create short variable names $name=$_POST['name']; $email=$_ ...

  10. Docker入门(windows安装)

    Docker入门(安装)Docker是一种轻量级容器技术,实际中直接运行在当前操作系统(Linux)上,而不是虚拟机中.PaaS提供了存储,数据库,网络,负载均衡,自动扩展等功能,Docker云平台就 ...