cookie是什么

浏览器存储在本地电脑上的一小段文本文件,cookie的存在主要是为了解决http协议无状态的问题,例如通过cookie来判断用户的登录状态,是否是某一个用户等。

cookie的结构 

    cookie以键值对的形式存储数据。

由expires(过期时间)、domain(cookie在哪些域下可以被发送)、path(cookie能在哪些路径下可以被发送) 、name(存放键值对)、secure(安全标志,cookie只能在htttps中有效)、httponly(不能通过脚本 Document.cookie访问cookie)。

浏览器和服务器之间如何传递cookie

    服务器通过在响应头部添加set-cookie字段向用户代理传递cookie信息。

浏览器通过在请求头部添加cookie字段向服务器传递之前保存的cookie信息 。

cookie的作用域 

domain和path确定了cookie的作用域。

domain确定了cookie在哪些域下可以被发送,path确定了哪些路经下可以被发送。

最需要值得注意的是当不给cookie设置domain时,默认cookie的作用范围为当前主机的域,不包含域的子域,当给cookie设置了domain,cookie的作用范围包含域的子域。比如:当前的路径的域为bai.com,cookie不设置domain,domain默认为bai.com,cookie只能在为bai.com的域的路径在被发送,aaa.bai.com域下不能发送当前这个cookie。当设置domain为bai.com时,cookie的作用范围是.bai.com,也就是包含了bai.com的子域,在bai.com和aaa.bai.com域下都可以发送cookie。

重点案例:

当创建cookie和修改cookie时要特别注意,比如我最近遇到的一个问题,退出登录无法清空token的问题,最后却发现在setCookie时没有给cookie设置域,在unSetCookie想清空cookie中的值时却给cookie设置了域。

      在创建或修改的时候,cookie的结构中除了过期时间,其他任一标示符不一样都会新创建一个cookie。

      在这个例子中,比如当前域是baidu.com,默认的domain为baidu.com,但是当设置了domain时,可以在浏览器中看到cookie中的domain为.baidu.com。两个domain不一样,两个cookie也不一样。后面设置的cookie要想覆盖前面的cookie的内容,必须保证name、path、domain、secure、httponly都是一致的。

export function setCookie(name, value, expires, path, domain, secure) {
let cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value); if (expires instanceof Date) {
cookieText += '; expires=' + expires.toGMTString();
} if (path) {
cookieText += '; path=' + path;
} if (domain) {
cookieText += '; domain=' + domain;
} if (secure) {
cookieText += '; secure';
}
document.cookie = cookieText;
} export function unsetCookie(name, path, domain, secure) {
path = path || window.location.pathname
domain = domain || window.location.hostname
setCookie(name, '', new Date(0), path, domain, secure);
}

  

cookie的创建和删除

   创建时:

   名称和值是必须有的字段,且必须被URL编码(encodeURIComponent编码)

删除时:

    1、不设置过期时间,默认会一个会话时间,关闭浏览器,就被删除

   2、设置expires过期时间或设置max-age最大时间

   3、浏览器的cookie数量达到限制,超出的cookie会被删除

cookie的限制条件

  不同浏览器对cookie的限制不同,cookie数量20到50不等,大小一般不能超出4kb。

cookie的用途

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

参考资料:

MDN:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

http之cookie详解: https://www.kancloud.cn/kancloud/http-cookies-explained/48332

最新文章

  1. WinCE小结
  2. HP iLo2 试用序列号
  3. 开源一个动态解析protobuf的工具
  4. Struts2中配置默认Action
  5. js模拟表单提交
  6. MongoDB 启动mongo不带DB
  7. MySQL用命令行导出数据库
  8. 【编程之美】计算1-N中含1的个数
  9. Android之AlertDialog.Builder详解
  10. USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制
  11. PHP5常量
  12. Maven安装中的问题
  13. Items divided
  14. 素数槽csuoj
  15. Django之路由分发和反向解析
  16. Chapter 5 Blood Type——20
  17. 雷林鹏分享:解决CI框架的Disallowed Key Characters错误提示
  18. 跨语言调用Hangfire定时作业服务
  19. SLD Related Gateway Serivces Unavaliable
  20. MFC用串行化实现文档存储和读取功能

热门文章

  1. Codeforces Round #519
  2. C语言--第八周作业评分(5班)
  3. lnmp架构、mysql的安装、php的安装、nginx相关
  4. ubuntu软件管理
  5. oracle 11g数据库--创建表空间,创建用户,用户授权并指定表空间。
  6. break与continue关键字的使用
  7. oracle Awr报告
  8. Python中msgpack库的使用
  9. ORM 创建manytomay的三种方法 反向查询 和一些 双下方法版学员管理系统3
  10. codeblock设置快捷键