关于前后端写入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则默认当前域名,传了则强制在前面加一个.。

原文地址:https://www.cnblogs.com/both-eyes/p/11842506.html

时间: 2024-10-14 13:45:07

关于前后端写入Cookie时domain的一个问题的相关文章

前后端分离之JWT用户认证

在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我们的程序就不知道谁是谁,就要再验证一次.所以为了保证系统安全,我们就需要验证用户否处于登录状态. 传统方式 前后端分离通过Restful API进行数据交互时,如何验证用户的登录信息及权限.在原来的项目中,使用的是最传统也是最简单的方式,前端登录,后端根据用户信息生成一个token,并保存这个 to

[转] 前后端分离开发模式的 mock 平台预研

引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都各自有自己的开发流程,构建工具,测试集合 关注点分离,前后端变得相对独立并松耦合 开发流程 后台编写和维护接口文档,在 API 变化时更新接口文档 后台根据接口文档进行接口开发 前端根据接口文档进行开发 开发完成后联调和提交测试 面临问题 没有统一的文档编写规范,导致文档越来越乱,无法维护和阅读 开

前后端的分离

对于大部分应用,已经不需要从后端读取HTML页面或者模板,前端完全可以根据数据自行渲染页面/模板,这样,前后台交互就可以简化为数据的增删改查.利用AJAX技术,实现页面局部刷新,促使了前后台分离的可能性. 那么,如何利用前后端分离开发模式,开始一个项目呢? 1. 产品文档 产品经理会先设计好整个产品的业务模块和流程,并给出产品文档,包括UI交互,流程图,模块划分等等.这个时候,产品,前端,后端,测试需要一起评审文档,可能需要多次评审才能确定设计方案. 2. 前端提供接口定义 第二个阶段是前后台同

一个Java程序猿眼中的前后端分离以及Vue.js入门

松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ,因此在我的书里边就没有多说.但是最近总结小伙伴遇到的问题,感觉很多人对前后端分离开发还是两眼一抹黑,所以今天松哥想和大家聊一下前后端分离以及 Vue.js 的一点事,算是一个简单的入门科普吧. 前后端不分 后端模板:Jsp.FreeMarker.Velocity 前端模板:Thymeleaf 前

前后端API交互如何保证数据安全性?(转)

前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互. 网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,这样的接口对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举. 数据的安全性非常重要,特别是用户相关的信息,稍有不慎就会被不法分子盗用,所以我们对这块要非常重视,容不得马虎. 如何保证API调用时数据的

从零开始搭建前后端分离的NetCore(EF Core CodeFirst+Au)+Vue的项目框架之二autofac解耦

在 上一篇 中将项目的基本骨架搭起来能正常跑通,这一篇将讲到,如何通过autofac将DbContext和model进行解耦,只用添加model,而不用在DbContext中添加DbSet. 在这里就不详细讲autofac是干什么用的了,简单说下autofac. 1.autofac可替换net core自带的DI IOC,用来扩展. 2.autofac可提供Aop,具体实现在博客园有很多示例. 3.autofac的几个生命周期用法:InstancePerDependency 每次都创建一个对象

前后端分离后API交互如何保证数据安全性

前后端分离后API交互如何保证数据安全性? 一.前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互. 网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,这样的接口对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举. 数据的安全性非常重要,特别是用户相关的信息,稍有不慎就会被不法分子盗用,所以我们对这块要非

利用gulp解决前后端分离的header/footer引入问题

在我们进行前后端完全分离的时候,有一个问题一直是挺头疼的,那就是公共header和footer的引入.在传统利用后端渲染的情况下,我们可以把header.footer写成两个单独的模板,然后用后端语言的include即可在其他页面中引入.我之前在<一个简单粗暴的前后端分离方案>这篇文章中说过一种方法,就是用handlebars把header.footer模板预编译为js文件,然后在页面的头部用document.write写到页面中.这种方式的弊端也比较明显,那就是依赖一个模板引擎.在使用mvv

Java前后端分离的认识

1.原由 在网上查了关于前后端分离的资料,有所粗浅认识.记录下来,方便以后使用.以下均是个人看法,仅做参考.如有错误请指教,共同进步. 2.为什么前后端分离? ①.一个后台,可以让多种前台系统使用.后台仅仅对外提供接口,前台遵从接口标准向此接口发送合法的数据来获取对应的数据.例如,一个后台系统,你可以在web端.app.小程序.等多种前端来访问后台对应的接口. 3.分离后的前后台开发人员的工作内容变化 ①.前台开发者不在仅仅简单的提供页面,还要负责调转的任务(以前靠springmvc.strut