cookie

个人感觉用于维持登录状态,类似与登录百度账号,在其它百度的产品网页无需再次登录
cookie需要在http的协议下才会有
cookie不可跨域
cookie的数量与大小有限制 一般为4K 数量为50个
cookie存储在浏览器中
cookie存储时间灵活,服务器与客户端都可以设置
会跟随请求到服务器
设置方式 :document.cookie cookie只有这一种设置方式 cookie没有专门的操作方法
值 : key : value
cookie的属性
name : cookie的名字,唯一性,第二次会覆盖第一次
value:cookie的值

  1. document.cookie = 'name=kaivon';

domain:设置cookie在哪个域下是有效的
path:cookie的路径

  1. document.cookie = 'color=red; domain=127.0.0.2; path=/do'; // 当在 http://127.0.0.2:5500/do 下才能看到

expires:cookie过期的时间

  1. document.cookie = 'width=40; expires=' + new Date(2030, 1, 1); //2330年1月1号过期

max-age:cookie的有效期
-1 :过期
0:临时
正数:有效时间 以秒为单位

  1. document.cookie = 'padding=30; max-age=5'; // 五秒后过期

下面三个前端无法控制
HttpOnly 有这个标记的cookie,前端是无法获取的
Secure 设置cookie只能有过https协议传输
SameSite 设置cookie在跨域请求的时候不能被发送
cookie的小demo

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. #box {
  8. width: 100px;
  9. height: 100px;
  10. position: absolute;
  11. left: 100px;
  12. top: 100px;
  13. background: green;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <div id="box"></div>
  19. <script>
  20. //封装cookie
  21. var manageCookie = {
  22. //设置cookie
  23. set: function (name, value, date) {
  24. //expires date:要求用户传入的是一个时间节点(这里函数默认规定传进来的是天数)
  25. /* var endDate = new Date(); //过期时间点
  26. endDate.setDate(endDate.getDate() + date);
  27. document.cookie = name + '=' + value + '; expires=' + endDate; */
  28. document.cookie = name + '=' + value + '; max-age=' + date; //这里要求用户传入的第三个参数为过期的秒数
  29. },
  30. //移除cookie
  31. remove: function (name) {
  32. this.set(name, '', 0); //只需要把时间设置成0就可以了
  33. },
  34. //获取cookie
  35. get: function (name) {
  36. var cookies = document.cookie.split('; '); //'name=kaivon; padding=30; width=40;' => ['name=kaivon', 'padding=30', 'width=40']
  37. for (var i = 0; i < cookies.length; i++) {
  38. //[['name','kaivon'],['padding','30'],['width',40]]
  39. var item = cookies[i].split('='); //['name','kaivon']
  40. if (item[0] == name) { //这个条件成立说明用户传进来的那个cookie的名字找到了
  41. return item[1];
  42. }
  43. }
  44. }
  45. }
  46. //拖拽
  47. var drag = {
  48. init: function (dom) {
  49. this.dom = dom;
  50. this.bindEvent();
  51. var l = manageCookie.get('newLeft');
  52. var t = manageCookie.get('newTop');
  53. this.dom.style.left = l ? l + 'px' : '100px';
  54. this.dom.style.top = t ? t + 'px' : '100px';
  55. },
  56. bindEvent: function () {
  57. this.dom.onmousedown = this.mouseDown.bind(this);
  58. },
  59. mouseDown: function (e) {
  60. document.onmousemove = this.mouseMove.bind(this);
  61. document.onmouseup = this.mouseUp.bind(this);
  62. this.disX = e.clientX - this.dom.offsetLeft;
  63. this.disY = e.clientY - this.dom.offsetTop;
  64. },
  65. mouseMove: function (e) {
  66. this.newLeft = e.clientX - this.disX;
  67. this.newTop = e.clientY - this.disY;
  68. this.dom.style.left = this.newLeft + 'px';
  69. this.dom.style.top = this.newTop + 'px';
  70. },
  71. mouseUp: function () {
  72. document.onmousemove = null;
  73. document.onmouseup = null;
  74. //鼠标抬起的时候需要存储(cookie)一下此刻盒子的位置信息
  75. manageCookie.set('newLeft', this.newLeft, 10000);
  76. manageCookie.set('newTop', this.newTop, 10000);
  77. }
  78. }
  79. drag.init(document.getElementById('box'));
  80. </script>
  81. </body>
  82. </html>

Web Storage

分为两个
localStorage与 sessionStorage 都是js的内置对象 他们的原型是 Storage
sessionStorage 会话级别的存储,仅在数据的沟通中有效,仅在本页面有效
不可跨域
本地储存
与协议无关,cookie需要http协议,storage对协议没有要求

localStorage 下的属性
1、length 本地存储数据的数量
localStorage 下的方法
1、key() 通过索引找到存储的数据 // 此处的索引会是乱序,因为他不会按照添加顺序进行排序,这个方法有些鸡肋
2、getItem() 通过键名取到本地存储的数据
3、setItem() 设置一个本地存储数据
4、removeItem() 删除一个本地存储数据
5、clear() 清空本地存储数据

  1. localStorage.setItem('name', 'kaivon');
  2. 储存对象
  3. var color = ["red", "green"]; //"red", "green"
  4. var color = { "c1": "red", "c2": "green" } //[object Object]
  5. localStorage.setItem('color', JSON.stringify(color));
  6. console.log(JSON.parse(localStorage.getItem('color')));

storage事件 当在另一个页面修改同一个localStorage ,其他页面也会跟着更新,就像是购物车,在卖鞋子页面往购物车里添加一双鞋,又在买衣服的页面添加一身衣服,但是购物车页面都会显示你所添加进购物车的鞋子与衣服,

  1. window.addEventListener('storage',function(ev){
  2. console.log('我在04页面修改了购物车,这个log会在05的页面打印出来;或者我在05的页面修改了购物车,这个log会在04的页面打印出来!');
  3. console.log(ev.key); //修改的是哪一个localstorage(名字key)
  4. console.log(ev.newValue); //修改后的数据
  5. console.log(ev.oldValue); //修改前的数据
  6. console.log(ev.storageArea); //storage对象
  7. console.log(ev.url); //返回操作的那个页面的url
  8. init();
  9. });
  1. [localStorage的购物车.rar](https://www.yuque.com/attachments/yuque/0/2020/rar/1376603/1598282385052-76496ed0-18a0-482c-b3f3-294d689b60ab.rar?_lake_card=%7B%22uid%22%3A%221598282383558-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Frar%2F1376603%2F1598282385052-76496ed0-18a0-482c-b3f3-294d689b60ab.rar%22%2C%22name%22%3A%22localStorage%E7%9A%84%E8%B4%AD%E7%89%A9%E8%BD%A6.rar%22%2C%22size%22%3A150499%2C%22type%22%3A%22%22%2C%22ext%22%3A%22rar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%225Zmrg%22%2C%22card%22%3A%22file%22%7D)