浅谈cookie、session、localStorage、sessionStorage

cookie和session:

cookie技术是客户端的解决方案,cookie是服务端发给客服端的特殊信息,客服端以文本文件的方式存储在本地,客服端每次向服务器发送请求的时候都会带上这些特殊信息。

cookie介绍:

cookie的由来:

在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都属于同一个会话,另一个用户的所有请求操作都属于另一个会话,两者不能混淆。Web应用程序使用HTTP协议进行数据传输,但HTTP协议是无状态的协议,一旦数据交换完毕,客户端和服务端的链接就会关闭,这意味着服务端无法从HTTP协议上跟踪会话。于是出现了cookie机制,弥补HTTP的不足。有两个HTTP头部专门用来设置以及传送cookie的,分别是Set-Cookie和Cookie。Set-Cookie是服务端传给客户端的,用来告诉客户端建立一个Cookie,并且在后续连接服务端的时候,带上这个Cookie;Cookie就是客户端连接服务端的时候,传给服务端的,告诉服务端这属于哪个会话,直到cookie过期之前,每次连接都会传cookie。

cookie的工作原理:

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

cookie设置及发送过程:

客户端发送一个http请求到服务器端 -> 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部 -> 客户端发送一个http请求到服务器端,其中包含Cookie头部 ->服务器端发送一个http响应到客户端

cookie的不可跨域名性:

cookie在客户端是由游览器来管理的,不能的域名的cookie是不可混淆的,从而保证用户的隐私。

cookie的属性:

String name:该Cookie的名称。Cookie一旦创建,名称便不可更改。 Object value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。 int maxAge:该Cookie失效的时间,单位秒。如果为正数,则该Cookie在>maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1。 boolean secure:该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。 String path:该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。 String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。 String comment:该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明。 int version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范。

cookie的有效期:

Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。 如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。

如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。

如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。

session:

session技术则是服务端的解决方案,是服务端使用的一种记录客户端状态的机制,存储在服务器的内存中,相应的增加了服务器的存储压力。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

session的有效期:

由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。

cookie和session都是为了验证用户身份,他们的区别在于:

1)cookie用于客户端,session用于服务端。

2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗; session相对来说更安全。

3)单个cookie的大小限制是4k,cookie数一般不超过20个。

localStorage和sessionStorage是html5新增的特性,本地存储。

localStorage:

localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

sessionStorage:

sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。源生接口可以接受,亦可再次封装来对Object和Array有更好的支持。

Cookie:

生命期为只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 存放数据大小为4K左右 。有个数限制(各浏览器不同),一般不能超过20个。与服务器端通信:每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题。但Cookie需要程序员自己封装,源生的Cookie接口不友好。

localStorage、seesionStorage、cookie的区别。

1)大小限制不同:cookie的大小限制为4k,同个domain下不超过20个;localStorage和sessionStorage的大小限制为5M左右。

2)有效期不同:cookie的有效期是通过设置过期时间来决定的,过期时间之前一直有效,即使游览器关闭。localStorage的有效期是永久的,除非手动删除。sessionStorage仅在当前会话下有效,关闭页面后就删除。

3)和服务器的通信: cookie在每次与服务器通信的时候都会携带在http头中,cookie保存过多,对通信性能会产生影响;localStorage和sessionStorage都不参与和服务器的通信。

4)作用域不同:不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage和cookie(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。

转载于:https://juejin.im/post/5b211671f265da6e1a6043ec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值