JS Cookie丢失问题

前些天有人问我vue中使用proxy发送请求,为什么请求时cookie丢失,首先说一下我对cookie的理解:

1、cookie在正常情况下是会在每次请求时自动携带,

2、cookie虽然是由一个网页所创建,但并不只是创建cookie的网页才能读取该cookie。

在默认情况下,与创建cookie的网页在同一目录或子目录下的所有网页都可以读取该cookie。即:

(1)如果在这个目录下还有子目录,要使在子目录中也可以访问,则需要使用path参数设置cookie,语法如下:

  document.cookie="name=value; path=cookiePath";

 (2)如果要使cookie在整个网站下可用,可以将cookieDir指定为根目录,示例如下:

  document.cookie="userId=320; path=/";

上面所说都指的是在同一个目录中的访问,可是要想在不同虚拟目录中访问则要另外想办法来解决这个问题。

 设置路径代码如下:

var now=new Date()
new Date().setDate(now.getDate()+1);
var cookies="setCookies="+escape("我的cookies")+";expires="+now.toString()+";path=/";

注意:path不能解决在不同域中访问cookie的问题。

(3) 在默认情况下,只有和设置cookie的网页在同一个Web服务器的网页才能访问该网页创建的cookie。

但可以通过domain参数来实现对其 的控制,其语法格式如下:

document.cookie="name=value; domain=cookieDomain";

设置域代码如下:
  
var now=new Date()
new Date().setDate(now.getDate()+1);
var cookies="userName="+escape("哈哈")+";expires="+now.toString()+";path=/; domain=.baidu.com";
 
看完上面的叙述我们回到上面的疑问,不难理解vue中使用proxy时cookie丢失的原因就是path和domain,
如果后台返回cookie的path是'/b'而本地前端本地开发地址为localhost:8080/#/home 页面,我们需要再后端返回cookie时手动修改path路径,代码如下:
  proxyTable: {
    '/api':{
    target: '后台接口地址',
    changeOrigin: true,
    pathRewrite: {
    '^/api': '/b',//注意这里只是接口关键字的替换,与cookie的path无关
    },
     onProxyRes(proxyRes, req, res) {
      var oldCookie = proxyRes.headers['set-cookie']
      if(oldCookie== null || oldCookie.length==0){
        delete proxyRes.headers['set-cookie']
        return
       }
      var oldCookieItems = oldCookie[0].split(';')
      var newCookie = ''
      for(var i=0; i < oldCookieItems.length; ++i){
        if(newCookie.length >0)
                  newCookie += ';'
        if(oldCookieItems[i].indexOf('Path=') >= 0)
          newCookie += 'Path=/'
         else
           newCookie += oldCookieItems[i]
 
        }
 
      proxyRes.headers['set-cookie'] = [newCookie]
      }
 
    }
  }

JS Cookie丢失问题的更多相关文章

  1. js COOKIE 记住帐号或者uuid

    当开始接到这个任务的时候,我对cookie还是没多少了解的,而uuid的生成也是一无所知.但是当你发现这个网址http://stackoverflow.com/questions/105034/how ...

  2. [JS]Cookie精通之路

    [JS]Cookie精通之路 转http://blog.163.com/neu_pdh1983/blog/static/572407020077310528915/ 发布:Cary 媒体:www.Ju ...

  3. cookie丢失、登陆自动退出问题解决

    cookie保存在客户端或者内存中,不易丢失.但是在某些情况下会被忽略.在项目过程中遇到过跨域丢失的情况.在VS里面运行的程序,产生的cookie默认是没有domain值的,但是给它设定domain值 ...

  4. nginx通过域名访问项目(不接项目名称),cookie丢失问题详解

    最近搞了个域名,想用它直接去访问Tomcat上部署的项目,开始一直必须加上项目名称,经过短暂配置,成功了. 访问一次,到达登陆页面,结果死活登录不进去,一直在登陆界面,原来是由于cookie丢失,现配 ...

  5. Cookie丢失的原因

    最近在运行项目遇见cookie丢失的问题,这里简单总结了几点 1.Cookie的Domain设置不正确2.Cookie超时3.Cookie中含有一些非法字符,致使浏览器丢弃Cookie4.程序源码可能 ...

  6. js cookie创建读取删除函数封装

    js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...

  7. js cookie可选参数(document.cookie='name=张三;expires='+day;)

    js cookie可选参数(document.cookie='name=张三;expires='+day;) 一.总结 1.可用secure属性来设置安全协议传输 2.expire属性用的比较多,其它 ...

  8. js cookie介绍和实例(用于自动登录,记住用户名等)

    js cookie介绍和实例(用于自动登录,记住用户名等) 一.总结 1.cookie在客户端:因为js是最初是用来在客户端和服务器端进行通信使用的,所以客户端比如js可以操作cookie正常 2.c ...

  9. 记一次奇怪的cookie丢失

    .net给Image控件设置一个空图片路径的时候出现丢失cookie 比如说, img_path.ImageUrl ="../"+  ds.Tables[0].Rows[0][&q ...

随机推荐

  1. python_14_生成器

    什么是生成器? -- 动态的生成有规律的列表和元组,查询多少才会生成多少数据,不需要时数据不存在 - 大到10几万数据,就省空间了 什么是列表生成式? -- [ handle_i_result for ...

  2. alwaysOn中关于维护计划的应用方案

    由于alwaysOn环境下主副本所在的实际服务器不固定, 所以我目前采取的方案是创建维护计划的时候, 在各个服务器上创建一份维护计划. (假设有2个服务器需要故障转移, 那么就在这两个服务器上分别创建 ...

  3. SQL Server ——动态SQL

    EXECUTE 执行 Transact-SQL 批中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.标量值用户定义函数或扩展存储过程.SQL Server 2005 扩展了 E ...

  4. weex 启动 ios 模拟器

    前提需要的安装 node npm weex-toolkit cocoaPods 1. 创建weex工程 weex create helloWolrd 2. 进入helloWolrd文件夹安装依赖,我用 ...

  5. Ipython的安装/ipython notebook的简单使用

    安装了pyhton的windows版的shell好久了,今天才听说Ipython这个东西,确实在windows下的python shell很难用,一旦输入错误就要重新来过 了解了下ipython,然后 ...

  6. IOS 疯狂基础之 页面间跳转

    常用的就两种 一种通过导航,一种直接跳 第一种 直接跳转 思路大致就是new一个目的页面,然后设置下页面跳转动画 中间还可以做点目的页面的数据初始化: ValueInputView *valueVie ...

  7. 关于HTTP GET & POST的区别(转)

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE. URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTT ...

  8. KBEngine游戏服务器(一)——引擎环境配置

    系统:Win10 版本:Visual Studio 2013(也就是vs120) kbengine:v1.0.0 MySQL:5.7 MySQL Workbench :6.3 一.下载kbengine ...

  9. OpenStack和Hadoop的区别

    其实,OpenStack和Hadoop不是同一个层次的东西,无法比较,非要说出个区别,那就是:OpenStack是云计算管理平台,应该是属于系统级别的软件,它的主体思想是把资源进行分离,给不同的用户提 ...

  10. Yii AR中处理多表关联的relations配置

    关系型 Active Record官方文档中指出: 两张表之间的关联是根据外键来的,但是这种外键关联虽然在数据容错方面有益处,但是在性能上是个损伤,所以,一般是不定义外键的. 这种情况下,他们之间的关 ...