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

  • 相关阅读:
    Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)
    Unity中调用手机中的粘贴功能
    关于Unity中IphoneX的适配
    可以接受多个字符串的可变参数
    可变参数函数示例
    多维数组指针指向引用问题
    printf的封装与实现
    关于MQTT的相关工具和使用(参考百度天工)
    单片机的堆和栈(Heap & Stack)详解
    单片机的内存分配(变量的存储位置)详解
  • 原文地址:https://www.cnblogs.com/both-eyes/p/11842506.html
Copyright © 2020-2023  润新知