http cookie的domain使用
问题描述
最近遇到了一个因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使用的更多相关文章
- js与cookie的domain和path之间的关系
1.前言 使用javascript操作cookie我们都经常使用,对cookie不是很了解的话可以看下这篇帖子[javascript操作cookie](http://www.cnblogs.com/D ...
- Cookie的Domain
每个Cookie都有常用的几个元素:name.value.expires.domain Cookie的Domain 设置cookies时,可以设置cookie的域名参数domain,标识cookie在 ...
- Cookie的Domain属性
Cookie 加了Domain后就写不进去了(不加domain就可以写进去了) 本地测试的时候需要把domain换成localhost cookie跨域的问题,意思就是说A.com下能访问B.com域 ...
- 关于前后端写入Cookie时domain的一个问题
1.1. 前端 先假设有如下setCookie方法: function setCookie(name, value, day, path, domain) { day = day || 30; pat ...
- cookie 的Domain删除失败的问题
最近接手一个老项目,项目中使用的是cookie来做的处理的,新增的时候cookie添加了域, 但是删除的时候没有添加域,导致删除cookie的时候一直失败!还有cookie的创建与删除,应该都必需经过 ...
- springboot 1.5.x 使用tomcat8设置cookie的domain以dot开头报错
"C:\Program Files\Java\jdk1.7.0_75\bin\java" -XX:TieredStopAtLevel=1 -noverify -Dspring.ou ...
- 理解cookie的path和domain属性
今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...
- cookie的path和domain參数实例解析
一句话概括两个參数含义各为: path表示cookie所在的文件夹 domain表示的是cookie所在的域,默觉得请求的地址 首先改动我们的 hosts 文件 我本机内网ip 192.168.1.1 ...
- 理解cookie的path和domain属性(转)
今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...
随机推荐
- ffmpeg 推送、保存rtmp 流命令
1.将文件当做直播送至live ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName 2.将直播媒体保存至本 ...
- 自定义Realm解析
自定义Realm解析---------------------------------------> /* * Copyright 2005-2013 shopxx.net. All right ...
- Python 百度语音识别与合成REST API及ffmpeg使用
操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 百度语音识别官方文档 百度语音合成官方文档 注意事项:接口支持 POST 和 GET两种方式,个人支持用po ...
- Vanish/squid
http://www.yl1001.com/article/5291411898652918.htm HTTP加速 简单的说,在本次测试中,Varnish将来自80的请求转发到后端的nginx8080 ...
- 【Maven学习】Nexus私服代理其他第三方的Maven仓库
一.背景 [Maven学习]Nexus OSS私服仓库的安装和配置 http://blog.csdn.net/ouyang_peng/article/details/78793038 [Maven学习 ...
- docker搭建oracle 11.2.0.3.0
dockerfile 如下: FROM oraclelinux:-slim ARG ORACLE_BASE=/opt/oracle ARG ORACLE_HOME=/opt/oracle/produc ...
- redhat 7.2 内网安装docker
本文介绍在内网环境下如果通过网络代理映射来完成docekr的安装,首先在能上网的windows机器上安装squid,并启动,本实例中windows机器IP为 192.168.192.101 ,squi ...
- 循环链表的实现与操作(C语言实现)
循环链表是还有一种形式的链式存贮结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环. 循环链表的操作 1,循环链表的新操作 2, 获取当前游标指向的数据元素 3, 将游标重置指向链 ...
- JQuery的Ajax跨域请求的解决方式
今天在项目中须要做远程数据载入并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究 ...
- python16_day34【设计模式】
一.简单工厂模式 # coding : utf-8 # create by ztypl on 2017/5/24 from abc import abstractmethod, ABCMeta cla ...