首页 > 其他分享 >Cookie

Cookie

时间:2023-02-11 12:23:56浏览次数:32  
标签:name localStorage usname cookie Cookie document


初识Cookie

(1)Cookie是什么

是浏览器存储数据的一种方式
因为存储在用户本地,而不是存储在服务器上,是本地存储
一般会自动随着浏览器每次请求发送到服务器端
(2)Cookie有什么用
利用Cookie跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个页面的停留时间等。
(3)在浏览器中操作Cookie
不要在Cookie中保存密码等敏感信息

2、Cookie的基本用法

(1)写入Cookie:js语法document.cookie="";不能一起设置,只能一个一个设置。
  document.cookie = "usname=zs";//js写入cookie

 


(2)读取Cookie:读取cookie是一个由名值对构成的字符,每个名值对之间由“;”(一个分号一个空格)隔开

 console.log(document.cookie);//读取cookie

 

3、Cookie的属性

(1)cookie名称(Name)和值(Value)

最重要的两个属性,创建Cookie时必须填写,其它属性可以使用默认值

cookie的名称或值如果包含非英语字母,则写入时需要使用encodeURIComponent()编码,读取时使用decodeURlComponent()解码

一般名称使用英文字母,不要用中文,值可以用中文,但是要编码。

encodeURIComponent(里面必须是字符串) 函数可把字符串作为 URI 组件进行编码。

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

 document.cookie = `${encodeURIComponent("用户名")}=${encodeURIComponent(
        "张三"
      )}`;//非英文字母用encodeURLComponent()编码

 

(2)失效(到期)时间

对于失效的Cookie,会被浏览器清除

如果没有设置失效(到期)时间,这样Cookie称为会话Cookie

它在内存中,当会话结束,也就是浏览器关闭时,Cookie消失

想要长时间存在,设置expires或者max-age

expires的值为Date类型

 document.cookie = `usname=zs;expires=${new Date("2026-1-01 00:00:00")}`;

 

max-age的值为数字,表示当前时间+多少秒后过期,单位是秒。

document.cookie = `usname=zs;max-age=5`;//存在5秒

 

如果max-age的值是0或者是负数,则Cookie会被删除。

(3)Domain域:Domain限定了访问Cookie的范围

我们使用js只能读写当前域或父域的Cookie,无法读写其他域的cookie
(4)Path路径,path限定了访问cookie的范围(同一个域名下)
使用js只能读取当前路径和上级路径的cookie,无法读写下级路径的cookie
当name domain path 这3个字段都相同的时候,才是同一个Cookie
(5)HttpOnly设置了HttpOnly属性的CooKie不能通过js去访问
(6)Secur限定了只有在使用了https而不是http的情况下才可以发送给服务端
domian、path、secure都要满足条件,还不能过期的cookie才能随着请求发送到服务器端

4、Cookie的封装

(1):封装Cookie

 1 // 封装写入cookie
 2 // 创建cookie
 3 const set = (name, value, { maxAge, domain, path, secure } = {}) => {
 4   //把最重要的cookie值单独写进形参,后面的以{}形式传入,并设置函数默认值,不设置默认值则报错
 5   let cookies = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
 6   //写一个自己传入的cookie名称和值,并用encodeURIComponent()函数转化;以免对方传递的不是英语
 7   if (typeof maxAge === "number") {
 8     // 判断maxAge传入的值是否是数字
 9     cookies += `; max-Age=${maxAge}`;
10   }
11   if (domain) {
12     // 只要用户传入就可以直接使用,不传入等于默认值(undefined)
13     cookies += `; domain=${domain}`;
14   }
15   if (path) {
16     cookies += `; maxAge=${path}`;
17   }
18   if (secure) {
19     cookies += `; secure`;
20   }
21   document.cookie = cookies;
22   //定义cooki=自己封装的这个
23 };
24 //得到cookie的单个
25 const get = (name) => {
26   name = encodeURIComponent(name);
27   //   先将其转换成编译后的
28   const cookiea = document.cookie.split("; ");
29   //得到全部的cookie,将他转为数组;
30   for (const key of cookiea) {
31     //遍历cookie数组,
32     const [cookiekey, cookievalue] = key.split("=");
33     //将遍历好的数组结构赋值给cookiekey, cookievalue方便下面做判断;
34     if (cookiekey === name) {
35       // 用编译后的name与前面的cookiekey进行判断
36       return decodeURIComponent(cookievalue);
37       //如果cookie的名字与前面的name一样则返回值是它的值
38     }
39   }
40   return;
41   //如果获取一个没有cookie;则返回undefined
42 };
43 // 删除cookie
44 const remove = (name, { domain, path } = {}) => {
45   set(name, "", { domain, path, maxAge: -1 });
46   //核心调用set,然后把maxage=-1;
47 };
48 
49 export { set, get, remove };

 


(2):使用封装好的Cookie实现网站语言切换

 let cn = document.querySelector("#cn");
 let en = document.querySelector("#en");
      cn.addEventListener("click", () => {
        // 点击中文,用set()创建cookie
        set("language", "cn", { maxAge: 30 * 24 * 3600 });
        window.location = "./cookie.html";
        //强制刷新当前页面
      });
      en.addEventListener("click", () => {
        set("language", "en", { maxAge: 30 * 24 * 3600 });
        window.location = "./cookie.html";
      });

 


5、Cookie的注意事项

(1)前后端都可以写入和获取Cookie

(2)Cookie有数量限制:每个域名下的cookie数量有限20-50左右;当超过单个域名限制之后,再设置cookie,浏览器就会清除以前设置的cookie

(3)Cookie有大小限制:每个cookie的储存容量很小,最多只有4kb左右;

localStorage

1、初识localStorage

(1)localStorage是什么

  localStorag是一种浏览器存储数据的方式(本地存储),它只是存储在本地,不会发送到服务器端。

  单个域名下localStorage有总体内存大小限制(5m左右)

(2)在浏览器中操作localStorage

(3)localStorage的基本用法

  setltem():输入单个的键名和值

  getltem():获取里面的键名,获取不存在的返回null

  removeltem():删除单个,删除不存在的,不存在,

  clear():清除所有;

(4)使用localStorage实现自动填充

form表单中可通过点语法name获取到这个元素

const form = document.querySelector("#bd");
      const btn = document.querySelector("#btn");
      const usname = localStorage.getItem("usname"); //将获取到的值给usname
      if (usname) {
        //判断是否得到了这个值。
        form.name.value = usname; //如果里面有值则把这个值给元素的value
      }
      btn.addEventListener("click", (e) => {
        e.preventDefault(); //组织表单默认行为
        localStorage.setItem("usname", form.usname.value); //form表单中可以通过点语法,点属性得到对应的元素。
        form.submit(); //手动使用from的submit方法提交
      });

 

2、localStorage的注意事项

(1)localStorage存储期限:localStorage是持久化的本地存储,除非手动清除(比如通过js删除,或者清除浏览器缓存),否则数据永远不会过期。

(2)localStorage键和值的类型:存储的键和值只能是字符串类型,不是字符串类型,也会先转成字符串类型再存进去。

(3)不同域名下能否共用localStorage:不能共用localStorage

(4)localStorage的兼容性:ie7以下版本不支持localStorage,ie8开始支持localStorage,https://caniuse.com/查询是否兼容网址

3、sessionStorage会话存储

(1)会话结束(浏览器关闭),sessionStorage中的数据就会被清空。

(2)sessionStorage使用和localStorage一样

标签:name,localStorage,usname,cookie,Cookie,document
From: https://www.cnblogs.com/ffhyy/p/17107745.html

相关文章