博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cookie和session,sessionStorage、localStorage和cookie的区别
阅读量:5047 次
发布时间:2019-06-12

本文共 3573 字,大约阅读时间需要 11 分钟。

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也是在所有同源窗口中都是共享的 

转载于:https://www.cnblogs.com/shj-com/p/11341586.html

你可能感兴趣的文章
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&&打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
【转载】 IP实时传输协议RTP/RTCP详解
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
Linux系统的数据写入机制--延迟写入
查看>>
css3动画——基本准则
查看>>
javaweb常识
查看>>