在使用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. Django的settings源码分析

    Django其实有两个配置文件,一个是暴露给用户的可以自定义的配置,一个是项目默认的配置,用户如果配置了就用用户的,没有配置就用默认的. 首先需要在settings文件中导入,然后查看settings ...

  2. robotframework报错

    问题一:RobotFramework RIDE在运行测试用例时无法打开谷歌浏览器,原因是1.安装ride时没有安装chromedriver驱动   2.驱动版本与本机浏览器不兼容 解决方法:在pyth ...

  3. HDU-1166 敌兵布阵 (树状数组模板题——单点更新,区间求和)

    题目链接 AC代码: #include<iostream> #include<cstdio> #include<cstring> #include<algor ...

  4. Java获取IP地址,IpUtils工具类,Java IP地址获取

    ================================ ©Copyright 蕃薯耀 2020-01-17 https://www.cnblogs.com/fanshuyao/ import ...

  5. maven第一次创建项目太慢解决方法

    问题: 第一次用maven创建项目的时候,因为本地仓库中没有jar包,需要从中央仓库下载,所以会比较慢 解决方法: 因为从中央仓库下载默认使用的国外的镜像下载,速度比较慢,我们可以把镜像修改为从阿里云 ...

  6. mongo shell

    mongo shell mongo 连接 本地 mongo # 连接127.0.0.1:27017 远程 mongo "mongodb://mongodb0.example.com:2801 ...

  7. vector内存分配简单介绍

    众所周知,vector的size()其实并不代表它占用的空间,它实际占用空间可以用capacity()查看 众所周知,push_back()时,如果size==capacity则会使capacity从 ...

  8. Dev-C++如何创建源代码模板?

    Dev-C++如何创建源代码模板? 预览图片 按下Ctrl+N或者点击新建源代码,就会自动出现这些代码了 以下是操作步骤 编写你的模板 这里有我的样例: #include<iostream> ...

  9. 用JavaScript设计和创建对象

    通过在优锐课的java学习分享中,get很多学习新技能,分享给大家参考学习. 介绍 在阅读此分步指南之前,你可能需要关注面向对象编程的介绍. 以下步骤中包含的Java代码与该文章理论中使用的Book对 ...

  10. React函数式组件使用Ref

    目录: 简介 useRef forwardRef useImperativeHandle 回调Ref 简介 大家都知道React中的ref属性可以帮助我们获取子组件的实例或者Dom对象,进而对子组件进 ...