问题描述

  最近遇到了一个因cookie domain设置不正确导致公司自研的分布式session组件无法生效的问题。

  公司自研的这套分布式session组件依赖于设置在cookie中的sessionId,请求到后端时经过特定的filter处理,当发现cookie中不存在指定的sessionId值时,会重新生成一个sessionId种入到cookie中,如果存在就根据该sessionId的值从redis缓存中取出该值对应的session内容。

  但是组内一个服务接入这个组件自测的时候,发现每次请求都无法取到上一次session的值,排查后发现每一次请求中根本没有带上上一次cookie中种下的sessionId,导致每次请求否会生成一个新的sessionId。而每一次请求没有带上上一次请求的sessionId的原因在于该cookie值得domain设置不符合要求,导致cookie设置失败。

  1、当请求到后端时,发现cookie中没有sessionId,会重新生成sessionId并种到cookie中,如下图:

  

  2、请求没有带上上一次请求响应时设置在cookie中的sessionId,并重新生成sessionId,如下图:

  

  问题定位

  cookie中sessionId的domain设置不符合规范,导致该cookie值设置失败。虽然在浏览器中看到请求的相应中已经设置了cookie sessionId,但是这并不代表该cookie值设置成功,这仅仅表示了设置cookie值的动作。

  问题分析

  cookie domain的设置规则

  只能设置为当前域名及其父域名,否则无效。

  例如,一个服务的域名为dev.service.abc.com,cookie的domain设置可以为:dev.service.abc.com、.service.abc.com、.abc.com

  不能设置为.com、.cn、.net等

  不设置domain,默认domain为当前域名

  结合问题

  服务代码中该sessionId的cookie domain设置为如.abc的形式,和cookie domain设置为.com、.cn、.net是一个道理,不符合cookie domain的设置规则,这样设置cookie是无效的,因此请求无法带上一次设置的sessionId,因此上一次sessionId根据就没有成功种入到cookie中。

  cookie domain使用扩展

  Cookie中domain的一个最为重要和常见的作用就是实现cookie跨域共享。

  在qiye.epro.sogou.com域下种下cookie:cookieName=cookieValue,domain=.sogou.com,这样:其他以.sogou.com为后缀的域名对应的服务就可以获取到该cookie信息,例如: qyyun.epro.sogou.com、 h5-qiye.epro.sogou.com、www.sogou.com等,实现了cookie信息的跨域共享。

http cookie的domain使用的更多相关文章

  1. js与cookie的domain和path之间的关系

    1.前言 使用javascript操作cookie我们都经常使用,对cookie不是很了解的话可以看下这篇帖子[javascript操作cookie](http://www.cnblogs.com/D ...

  2. Cookie的Domain

    每个Cookie都有常用的几个元素:name.value.expires.domain Cookie的Domain 设置cookies时,可以设置cookie的域名参数domain,标识cookie在 ...

  3. Cookie的Domain属性

    Cookie 加了Domain后就写不进去了(不加domain就可以写进去了) 本地测试的时候需要把domain换成localhost cookie跨域的问题,意思就是说A.com下能访问B.com域 ...

  4. 关于前后端写入Cookie时domain的一个问题

    1.1. 前端 先假设有如下setCookie方法: function setCookie(name, value, day, path, domain) { day = day || 30; pat ...

  5. cookie 的Domain删除失败的问题

    最近接手一个老项目,项目中使用的是cookie来做的处理的,新增的时候cookie添加了域, 但是删除的时候没有添加域,导致删除cookie的时候一直失败!还有cookie的创建与删除,应该都必需经过 ...

  6. springboot 1.5.x 使用tomcat8设置cookie的domain以dot开头报错

    "C:\Program Files\Java\jdk1.7.0_75\bin\java" -XX:TieredStopAtLevel=1 -noverify -Dspring.ou ...

  7. 理解cookie的path和domain属性

    今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...

  8. cookie的path和domain參数实例解析

    一句话概括两个參数含义各为: path表示cookie所在的文件夹 domain表示的是cookie所在的域,默觉得请求的地址 首先改动我们的 hosts 文件 我本机内网ip 192.168.1.1 ...

  9. 理解cookie的path和domain属性(转)

    今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...

随机推荐

  1. 模拟退火算法(西安网选赛hdu5017)

    Ellipsoid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  2. redhat 6安装详解

    备注:redhat 6 系列OS安装步骤一致. 此处安装redhat 6.5 64位版本,即rhel-server-6.5-x86_64-dvd.iso 一.安装RHEL 6.5 用光盘成功引导系统, ...

  3. android中Logcat的TAG过滤

    如果代码中有这样的log: Log.e("Foo", "error in foo"); Log.d("Foo", "debug i ...

  4. 电子商务(电销)平台中订单模块(Order)数据库设计明细

    电子商务(电销)平台中订单模块(Order)数据库设计明细 - sochishun - 博客园 http://www.cnblogs.com/sochishun/p/7040628.html 电子商务 ...

  5. What Drives the Need for Database Sharding? DATABASE SHARDING

    wIO瓶颈 http://www.agildata.com/database-sharding/ What Drives the Need for Database Sharding? Databas ...

  6. Redundant Paths---poj3177(双连通分量)

    题目链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使 ...

  7. spring boot由浅入深(二)spring boot基本命令及操作

    一 spring常见注解 @RestController和@RequestMapping说明: @RestController.这被称为一个构造型(stereotype)注解.它为阅读代码的人们提供建 ...

  8. sort与sorted的区别及实例

    描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序方法2.用内置函数sorted进行排序(从2.4开始) so ...

  9. 测试命令运行时间:timeit和profile

    先说timeit from timeit import Timer def test1(): n=0 for i in range(101): n+=i return n def test2(): r ...

  10. android 的 ExpandableListView Example Tutorial

    https://www.journaldev.com/9942/android-expandablelistview-example-tutorial Welcome to Android Expan ...