• cookie和session,sessionStorage、localStorage和cookie的区别


    1.cookie

      含义: 存储在访问者的计算机中的变量,即存储在客户端

      创建一个cookie

        /* getCookie方法判断document.cookie对象中是否存有cookie,若有则判断该cookie中是否含有指定c_name的cookie,有则返回数据      没有则返回空串 */

     function getCookie(c_name){
    
          if (document.cookie.length>0){
    
            c_start=document.cookie.indexOf(c_name + "=")   //   indexOf()  返回指定字符串值在某个字符串中首次出现的位置,如果没有出现则返回-1
    
            if (c_start!=-1){ 
    
              c_start=c_start + c_name.length+1        //  0 + 8 + 1  即username=  之后的位置 9
              c_end=document.cookie.indexOf(";",c_start)   
              if (c_end==-1) c_end=document.cookie.length
              return unescape(document.cookie.substring(c_start,c_end))         //  subtring(start,stop)用于提取字符串中介于两个指定下标的字符     start必填,stop可选  参数都为非负整数
    
                 //  unescape() 对 escape() 编码的字符串进行解码。
    
            } 
          }
          return ""
        }

        /* setCookie方法将cookie名称为c_name的value值存入document.cookie对象中   */

     function setCookie(c_name,value,expiredays){
          var exdate=new Date()
          exdate.setDate(exdate.getDate()+expiredays)
          document.cookie=c_name+ "=" +escape(value) + ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())      //结果为:  username= xxx;expires=xxx;
    
     
    
           // toGMTString()方法,根据格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。
    
          // escape(string) 函数可对字符串进行编码,就可以在所有计算机上读取该字符串。
        }

        /* checkCookie()方法调用getCookie()判断document.cookie对象中名称为username的cookie是否已经设置,若已经设置则显示提示框显示信息,反之调用setCookie()方法设置cookie */

     function checkCookie(){
          username=getCookie('username')
          if (username!=null && username!=""){alert('欢迎登陆 '+username+'!')}
          else {
            username=prompt('输入用户名:',"")
            if (username!=null && username!=""){
              setCookie('username',username,365)
            }
          }
        }

      附加:  删除cookie   将expires设置为过期时间即可  cookie名称可为空

        document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

    2.session

      session依赖于cookie,它存储在服务器端

      session相当于程序在服务器上建立的一份用户的档案,用户来访的时候只需要查询用户档案表就可以了。

      HTTP协议是无状态的,session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为SESSIONID的cookie,它的值为该Session的id。Session依据该cookie来识别是否为同一用户。  

    应用场景

    1. 通过session累计用户数据。例如,一个未登录用户访问了京东网站,这个时候京东对其下发了一个 cookie,假设cookie的名字叫做abc,那这条记录就是 abc=001,同时京东的后台也生成了一个 session id, 它的值也为 001, 001 这个客户在 2 点、 3 点、 4 点分别添加了三件商品到购物车,这样后台也记录了 session id 为 001的用户的购物车里面已经有三件商品,并且只要每次客户端 cookie 带上来的值里面包含session id,后台都能够展示相应的数据,如果这个时候,在浏览器里面清空 cookie,cookie 数据消失之后,后台和客户端无法建立对应关系,购物车的数据就会失效了。
    2. 通过session实现单点登录。一个用户帐号成功登录后,在该次session还未失效之前,不能在其他机器上登录同一个帐号。登录后将用户信息保存到session中,如果此时在另外一台机器上一个相同的帐号请求登录,通过遍历(遍历的意思就是将所有session都查看一遍)Web服务器中所有session并判断其中是否包含同样的用户信息,如果有,在另一台机器上是不能登录该帐号的。

    3.Cookie和Session区别

        1、cookie数据存放在客户的浏览器上,session数据放在服务器上 

        2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑*到安全应当使用session 
        3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie 
        4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie 
        5、建议将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中 
        6、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息 
        7、session中保存的是对象,cookie中保存的是字符串 
        8、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的

    4.sessionStorage、localStorage和cookie的区别

    共同点:都是保存在浏览器端、且同源的 
    区别: 
        1、cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下 
        2、存储大小限制也不同,cookie数据不能超过4K,同时因为每次http请求都会携带cookie、所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大 
        3、数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭之前有效;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie:只在设置的cookie过期时间之前有效,即使窗口关闭或浏览器关闭 
        4、作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的 

  • 相关阅读:
    Cypress系列(74)- each() 命令详解
    Cypress系列(73)- within() 命令详解
    实战-电力窃露漏电用户自动识别
    谷歌colab切换使用tensorflow1.x版本
    解决pip安装tensorflow下载缓慢问题
    如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
    graph attention network(ICLR2018)官方代码详解(tensorflow)-稀疏矩阵版
    graph attention network(ICLR2018)官方代码详解(tensorflow)
    DGL中文文档
    graphSAGE的python实现
  • 原文地址:https://www.cnblogs.com/shj-com/p/11341586.html
Copyright © 2020-2023  润新知