关于前后端写入Cookie时domain的一个问题
1.1. 前端
先假设有如下setCookie方法:
function setCookie(name, value, day, path, domain)
{
day = day || 30;
path = path || '/';
var str = name + '=' + value + '; ';
if(day) str += 'expires=' + new Date(Date.now() + day * 24 * 3600 * 1000).toGMTString() + '; ';
if(path) str += 'path=' + path + '; ';
if(domain) str += 'domain=' + domain;
document.cookie = str;
},
假设当前域名为blog.xiaoming.com,经测试发现,JS在写入cookie时:
xei.setCookie('test1', 'abcd', 30, '/'); // 成功,默认写入当前域名
xei.setCookie('test2', 'abcd', 30, '/', 'blog.xiaoming.com'); // 成功,前面追加一个“.”
xei.setCookie('test3', 'abcd', 30, '/', 'abcd.xiaoming.com'); // 写入不成功
xei.setCookie('test4', 'abcd', 30, '/', '.xiaoming.com'); // 成功
xei.setCookie('test5', 'abcd', 30, '/', 'xiaoming.com'); // 成功,前面追加一个“.”
xei.setCookie('test6', 'abcd', 30, '/', 'www.qq.com'); // 写入不成功
结果:

说明:
- 不传domain,默认当前域名;
- 只要传了domain,则会强制在前面加上一个.,不管是一级还是二级域名;
- domain只能“小于等于”当前域名,否则写入不成功;
1.2. 特别注意
另外发现,.xiaoming.com下的cookie会出现在blog.xiaoming.com页面(也就是说可以被下级域名正确获取到),但是,xiaoming.com下的cookie不会出现在它的子域名页面!这个是以前没有注意的!
所以特别注意:
要想写入的cookie被其子域名共享,域名前面必须加一个英文的.!
1.3. 后台
以Java为例:
private void setCookie(HttpServletResponse response, String name, String value, String domain, String path, Integer days)
{
Cookie cookie = new Cookie(name, URLUtil.encode(value));// 防止中文乱码问题
cookie.setDomain(domain);
cookie.setPath(path);
cookie.setMaxAge(60 * 60 * 24 * days);
response.addCookie(cookie);
}
经测试同样存在和前端一样的问题:不传domain则默认当前域名,传了则强制在前面加一个.。
关于前后端写入Cookie时domain的一个问题的更多相关文章
- js读取后端写入cookie出现乱码
设置字符编码集即可 Cookie cookie = new Cookie("user",URLEncoder.encode(nMessage, "UTF-8") ...
- Cookie、Session、Token那点事儿和前后端分离之JWT用户认证
(两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...
- 12. 前后端联调 + ( proxy代理 ) + ( axios拦截器 ) + ( css Modules模块化方案 ) + ( css-loader ) + ( 非路由组件如何使用history ) + ( bodyParser,cookieParser中间件 ) + ( utility MD5加密库 ) + ( nodemon自动重启node ) + +
(1) proxy 前端的端口在:localhost:3000后端的端口在:localhost:1234所以要在webpack中配置proxy选项 (proxy是代理的意思) 在package.jso ...
- [django]前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- 前后端分离之JWT用户认证(转)
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- http cookie的domain使用
问题描述 最近遇到了一个因cookie domain设置不正确导致公司自研的分布式session组件无法生效的问题. 公司自研的这套分布式session组件依赖于设置在cookie中的sessionI ...
- 前后端分离之JWT用户认证zf
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- [转] 前后端分离之JWT用户认证
[From] http://www.jianshu.com/p/180a870a308a 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当 ...
- 前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
随机推荐
- Apache jena SPARQL endpoint及推理
一.Apache Jena简介 Apache Jena(后文简称Jena),是一个开源的Java语义网框架(open source Semantic Web Framework for Java),用 ...
- 异常处理的方式二:throws+异常类型
package com.yhqtv.demo01Exception; import java.io.File; import java.io.FileInputStream; import java. ...
- Nginx(1)---安装及基础命令
一.简述 Nginx是一个高性能WEB服务器,除它之外Apache.Tomcat.Jetty.IIS,它们都是Web服务器 Nginx 相对基它WEB服务有什么优势:Tomcat.Jetty 面向j ...
- ASP.NET Core 与 ASPOSE.Words for .NET
Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,它提供的原生API可以对Word.Excel.PDF.Powerpoint.Outlook.CAD.图片.3D.ZI ...
- 随笔之——伪类选择器:nth-child(n) 与 nth-of-type(n)的区别!!!
话不多说!直接正题!!! 一.E:nth-child(n)///选中父元素中第(n)个元素.若第n个元素为E则选中:若第n个不为E则不选中.n可以为2n(偶数).2n+1(奇数).等... 二.E:n ...
- vue.js click点击事件获取当前元素对象
Vue.js可以传递$event对象 <body id="app"> <ul> <li v-on:click="say('hello!', ...
- docker中安装宝塔面板教程
本人电脑是win10,安装的virtualbox,装的centos7.2,在centos7.2装了docker,这个比较简单,网上一大堆教程,今天说一下装好了docker之后怎么在docker中安装面 ...
- http 之 CORS简介
什么是CORS? CORS:跨域资源共享.是一种机制. 用处? 它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定 ...
- mac OS 搭建PHP项目开发环境
系统 macOS Mojave 版本10.14.6 mac OS 自带Apache和PHP 非常便利 sudo apachectl -v //查看apache版本 php -v //查看php版本 启 ...
- 百度云BaaS体系揭秘,突破共识机制、单机计算和串行处理三大瓶颈
区块链作为去中心化的技术机制拥有广泛的应用场景与市场潜能.自2017年爆发式增长后,区块链虽然已经进入平稳期,但仍然存在概念混淆.技术性能制约.智能合约制约.共识机制.网络建设等痛点.为了打破行业壁垒 ...