• sessionStorage & localStorage、session & cookie


    因为http协议是一种无状态协议,每一次http请求都是独自的,不受它之前和之后请求的影响。比如登录信息,这次请求带着登录信息,下次请求不知道有没有登录,无法追踪上次的请求,所以没有别的办法每次只能传很多参数。

    cookie和session,可以与服务器交互通信。

    一、cookie

    cookie保存在浏览器端,单个数据大小不超过4KB,是服务器发送到客户端的特殊信息,保存成字符串类型以文本的方式存储在客户端,cookie就是为了再请求的时候携带的,会随每次http请求头request header发送到服务器端请求接口。如果不在浏览器设置过期时间,cookie被保存在内存中,浏览器关闭就会删除掉这些cookie信息;如果没有设置过期时间,cookie被保存在硬盘中直到过期才会删除这些信息。

    1、cookie的应用场景:记录是否登录、上次登录时间、浏览器的页面、浏览次数等。             

    2、cookie的缺点:

    (1)存储空间小,只有4KB,存储数量限制,一般一个站点只有20个cookie;
    (2)用户可以操作(禁用或者修改删除)cookie,使功能受限;
    (3)安全性较低;
    (4)每次访问都要传送cookie给服务器,浪费带宽,如果保存过多数据影响性能。

    3、
    (1)获取cookie

    1. var cookieData = document.cookie;
    2. // cookie是每个cookie键值对通过一个分号+空格的形式串联起来的,例:key1=value1; key2=value2; key3=value3;

    (2)设置/修改cookie
       cookie的选项包括:
              expires(过期时间,GMT格式);
              max-age(单位为秒的时间段,失效时间是创建时间 + max-age);
              domain(域名);
              path(路径);
              secure(当请求是https或者其他安全协议时,包含secure选项的cookie才能被发送至服务器,安全协议时才能在客户端设置secure参数);
              httpOnly(在客户端是不能通过js代码去访问一个httpOnly类型的cookie的,也不能设置httpOnly参数,这种类型的cookie只能通过服务器端来设置)

    1. // 设置cookie以及过期时间
    2. var exp = new Date();
    3. exp.setDate(exp.getDate() + 1);
    4. documengt.cookie = 'ke=value; expire=' + exp.toGMTString();
    5. // 如果不设置过期时间,浏览器关闭后就会删除cookie
    6. document.cookie = 'key=value';

    (3)删除cookie

    1. // 设置过期时间为现在以前的时间
    2. var exp = new Date();
    3. exp.setDate(exp.getDate() - 1);
    4. document.cookie = "key=; expires=" + exp.toGMTString();

    二、session

    session保存在服务器端内存中,没有大小限制,通过类似Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)。服务器端创建session对象时会检测客户端请求有没有包含sessionId,如果没有就创建一个并且返回给客户端,客户端一般记在cookie里;如果HTTP请求带着sessionId,就返回对应的session对象。如果用户禁用cookie,需要使用response.encodeURL进行url重写把sessionId拼在url后面。每次启动session_start后前一次的sessionID就会失效或者session过期后的sessionID也会失效。

    session应用场景:保存用户登录信息,防止用户非法登录;

    session的缺点:

    (1)扩展性弊端:要求客户端代码和服务端代码在同一台服务器上,协议/域名/端口号一致。(如果不在同一个服务器上可以使用token进行身份验证);
    (2)session保存的东西越多,就越占用服务器内存,对于用户在线任何较多的网站,服务器的内存压力会比较大。当用户离开这些网站后,这些session还会保存一段时间,造成资源浪费。
    (3)重启服务器,session数据会丢失;
    (4)依赖于cookie(sessionID写在cookie里),如果禁用cookie,则要使用URL重写,不安全;
    (5)创建session变量有很大的随意性,可随时调节,不需要开发者做精确的处理,所以过度使用session变量将会导致代码不可读不好维护。

    _____________________________________________________________________________

    WebStorge:localStorge和sessionStorage属性允许在浏览器中存储key/value对的数据,不与服务器交互通信。存储大小5MB。只能存储字符串。存储的数据直接本地获取,比HTTP快。

    三、sessionStorage

    sessionStorage用于临时保存同一窗口(标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。

    应用场景:每次打开网页需要重新登录的登录信息。

    保存数据:

    1. sessionStorage.setItem('key','value');
    2. // 或者
    3. sessionStorage.key = value;
    4. // 或者
    5. sessionStorage['key'] = value;

    读取数据:

    1. var lastName = sessionStorage.getItem('key');
    2. // 或者
    3. var lastName = sessionStorage.key
    4. // 或者
    5. var lastName = sessionStorage['key']
    6. // 获取key
    7. sessionStorage.key(index)

    删除指定键:

    1. Storage.removeItem('key')
    2. // 删除所有
    3. sessionStorage.clear()

    四、localStorage

    localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。

    应用场景:长期登录的保存登录信息。

    保存数据:

    1. localStorage.setItem("key", "value");
    2. // 或者
    3. localStorage.key = value;
    4. // 或者
    5. localStorage["key"] = value;

    读取数据:

    1. var lastname = localStorage.getItem("key");
    2. // 或者
    3. var lastname = localStorage.key;
    4. // 或者
    5. var lastname = localStorage["key"];
    6. // 获取key
    7. localStorage.key(index); // 一般用不到,因为不仅仅有自己存的,所以你不知道你想要的那个keyindex是啥

    删除数据:

    1. localStorage.removeItem("key");
    2. // 删除所有
    3. localStorage.clear();


    文章摘至于:文章

  • 相关阅读:
    智能语音和自然语言处理技术
    刷新三观的HP-UX系统中的强指针赋值出core问题
    Bean作用域和生命周期
    Mysql GTID
    【CAN】CAN基础概念5
    嵌入式linux开发,Linux下访问PHY芯片寄存器,获取phyID号,获取phy的link状态
    selenium多窗口、多iframe切换、alert切换
    python_selenium自动化测试框架
    TCP发送窗口、接收窗口以及其工作原理
    UniApp组件封装
  • 原文地址:https://blog.csdn.net/m0_52545254/article/details/126887526