JS中的session和cookie区别

参考文章:

简单理解cookie/session机制:http://www.sohu.com/a/207801015_114819

JS学习之cookie和session:https://segmentfault.com/a/1190000011844051

 
Cookie、session和localStorage、以及sessionStorage之间的区别:  https://www.cnblogs.com/zr123/p/8086525.html
 
一、cookie

1.由来HTTP1.0中协议是无状态的,但在WEB应用中,在多个请求之间共享会话是非常必要的,所以出现了Cookiecookie是为了辩别用户身份,进行会话跟踪而存储在客户端上的数据;

2.定义:

    cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

3.js中的使用

    在js中操作cookie采用document.cookie获取用户传递给服务器的cookie值,返回的是一个字符串“key1=value1;key2=value2….”,解析该字符串获取想要的cookie值,若cookie值不存在,则放回空。解析的方法就有很多了,下面提供两种主要的解析方法 

方法一:

function getCookieValue(cookieName) {
    var strCookie = document.cookie;
    var arrCookie = strCookie.split(";");
    for(var i=0; i<arrCookie.length; i++) {
        var arr = arrCookie[i].split("=");
        if(arr[0] == cookieName)
            return arr[1];
    }
    return "";
}

方法二

function getCookieValue(cookieName){
    var c_start = document.cookie.indexOf(cookieName+"=");
    if (c_start!=-1)
    { 
       c_start = c_start + cookieName+"=".length+1 
       var c_end =document.cookie.indexOf(";",c_start)
       if (c_end==-1){
           c_end = document.cookie.length
           status = unescape(document.cookie.substring(c_start-1,c_end))
       } 
     } 
    return status;
}

    设置cookie值,直接用document.cookie=”key1=value1;key2=value2…”不用担心之前的cookie值会被覆盖,此操作相当于addCookie(key,value),每个cookie值都是平行的。若设置的cookie键已经存在,则会修改之前的值。此外,还可以设置cookie的存储时间(expires)、访问权限(path)等,下面给一个demo

function setCookieValue(key,value){
    var date = new Date();
    date.setTime(date.getTime()+100*24*3600*1000);
    document.cookie = key+"="+escape(value)+";path=/;expires="+date.toGMTString();
}

     加参数存储时间

	function setCookie(cname,cvalue,exdays)
		{
		  var d = new Date();
		  d.setTime(d.getTime()+(exdays*24*60*60*1000));
		  var expires = "expires="+d.toGMTString();
		  document.cookie = cname + "=" + cvalue + "; " + expires;
		}

    删除cookie只需要设置 expires 参数为以前的时间即可,如下所示,设置为 Thu, 01 Jan 1970 00:00:00 GMT:(GMT时间(格林尼治标准时间)),

注:删除时不需要指明cookie的值。

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

    其中,“path=/”设置cookie的访问权限,“/”表示全网络。默认页面的同目录下的其他页面及子目录下的页面都可以访问cookie。 

 

    “expires=”参数用于设置cookie的保存时长,单位ms,date.toGMTString()把时间转换成字符串。 

 

    另外,由于cookie是以字符串形式存储,可能会出现中文乱码问题,可以采用escape()和unescape()进行编码也解码。

    简单介绍一下localStorage,也是一种在客户端进行本地存储的机制,相当于cookie的加强版,比cookie拥有更大的存储空间,用法同sessionStorage。

sessionStorage.setItem(key,value);//设置指定session值
sessionStorage.getItem(key,value);//获取指定session值
sessionStorage.removeItem(key);//移除指定session
sessionStorage.clear();//清空session

二、session

1定义:

    session是另一种记录客户状态的机制,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。session相当于程序在服务器上建立的一份用户的档案,用户来访的时候只需要查询用户档案表就可以了。

三、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互相是访问不到的

    

总结:

    session是存储在服务器的一次回话,不会永久存储,当用户回话结束(浏览器关闭)后,经过session的生命周期后,session会被销毁,且不能在不同的页面中共享,即使是同一个页面。所以很多时候不能用session存储用户信息。 

    而cookie是存储在客户端(浏览器)的一种机制,永久存储,除非用户手动删除。每次用户向服务器请求的时候,都会携带本地存储的cookie。可以用cookie存储用户信息,设置的一些状态,跟踪用户行为等。 

四、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也是在所有同源窗口中都是共享的 
    5、web Storage支持事件通知机制,可以将数据更新的通知发送给监听者 
    6、web Storage的api接口使用更方便

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值