0. comprehend
cookie用来在客户端缓存信息,在登录后有服务器生成一个cookie文件保存在客户端浏览器,之后每次请求都会带上cookie保持登录状态(判断是否登录),一段时间后失效,这样缓存可以用来缓解服务器压力,但是数据不能过大,因为每次请求都会带上cookie,使带宽增加传递会变慢,最好也不要保存重要的密码等信息,因为cookie一旦被人恶意截获会盗取信息,重要信息可以放在服务器端的缓存session里,一定时间内保存,session过大会占用服务器性能。
1. cookie用处
因为http协议是无状态的,每次数据交换完,客户端与服务器的连接就会关闭,再次交换需要建立新的连接,所以服务器无法跟踪用户,而cookie就是一种跟踪服务器与客户端会话的机制。
2.cookie过程
用户将个人信息登陆提交至服务器,
服务器生成cookie文件,放在响应头传给客户端保存(内存或磁盘)
之后每次客户端请求都要带上cookie,存放在响应头发送至服务器,
服务器识别用户,动态返回该用户对应的信息
3. cookie优点
在客户端保存数据,简单的缓存和身份识别的作用。
保存用户登陆状态,判断是否登录。
4. cookie缺点
一个特定的域名下最多生成20个cookie,每个cookie不能超过4k否则会被截掉,数量和长度上的限制
因为每次请求都要带上cookie,cookie携带信息多会增加服务器和客户端之间的传递时间,增加流量消耗
安全隐患,cookie使用明文传输,被人拦截就能获得session的全部信息
5. cookie特点
cookie的不可跨域性:比如访问google只会携带google的cookie,不能用baidu的。是由浏览器来管理的,但是可以经过处理后使用。比如同公司的
保存中文需要utf8编码,保存二进制需要base64等编码
可以设置cookie只能在https下传输
因为是客户端的,所以使用脚本程序如js是很容易操作cookie的,但是为了安全,w3c标准会是js只能操作本网站的程序
6. session用处
cookie检查完用户之后,可以通过session获取用户更详细的信息。比如私密信息等。
7. session过程
每次用户第一次访问登陆成功后,在服务器端创建一个session会话(一般放在内存里),分配一个sessionid,客户端下次请求用sessionid获取session里的信息。每个用户都会有一个独立的session。且因为http是无状态的,所以sessionid需要放在cookie里来识别用户。
8. session优点
解决cookie安全问题,
存储用户信息,动态生成针对某一用户的页面
在不同页面间传递变量,使用session传递数据比request会快很多
9. session缺点
一定时间保存在服务器内,方式访问增多会占用服务器性能
需要cookie支持,禁止掉cookie将不能很好的使用session
10. session特点
对于同一个用户的两个浏览器打开,session不是同一个,除非是通过父窗口的链接等打开。
手机浏览器不支持cookie?所以可以打开cookie,或者直接使用URL重定向方法不使用cookie,直接传递sessionid
11. web storage(较高版本的浏览器和js支持)
因为session会很大影响服务器的性能,普遍会选择使用cookie,但是cookie的安全隐患和数量限制传输变慢等原因。所以html5的新特性web storage就是用来客服cookie的容量限制。
用处:当数据需要被严格控制在客户端时,原先只有cookie存储,变成web storage存储。Storage类型比cookie使用更大的存储空间来存储名值对儿。其只能存储字符串,非字符串数据会在存储之前被转换成字符串。因为不是每次都需要发送这些数据所以用storage来存储,这样会降低cookie对带宽的大量使用,提高性能。他提供存储会话数据的途径,提供了存储大量可以跨会话存在的数据的机制。
12. Web Storage类型
js提供了sessionStorage和globalStorage。在HTML5中提供了localStorage来取代globalStorage。
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage。
sessionStorage对象
存储特定于某个会话的数据,该数据只保持到浏览器关闭。
存储在sessionStorage中的数据可以跨越页面刷新而存在;
sessionStorage对象主要用于仅针对会话的小段数据的存储。
globalStorage对象
目的:跨越会话存储数据。要使用globalStorage对象,首先要指定哪些域可以访问该数据,通过方括号标记来实现:
//保存数据
globalStorage["wrox.com"].name = "Vicky";//获取数据
var name = globalStorage["wrox.com"].name;
在使用globalStorage对象时最好要指定域名,如果事先不能确定域名,那么使用location.host作为属性名比较安全。
如果不使用removeItem()或者delete删除,或者用户未清除浏览器缓存,存储在globalStorage属性中的数据会一直保存在磁盘上,因此globalStorage很适合在客户端存储文档或者长期保存用户偏好设置。
localStorage对象
localStorage对象是Html5中取代globalStorage的持久保存客户端数据的方案。要访问同一个localStorage对象,页面必须来自同一个域名,使用那个同一种协议,在同一个端口上。这相当于globalStorage[location.host].
保存在localStorage和globalStorage中的数据一样,数据保留到通过JavaScript删除或者是用户清除浏览器缓存
13. Web storage和cookie的区别
a. Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。
b. 除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。
c. 但是cookie也是不可以或缺的:cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。
14. 负载均衡下的使用session
当多台服务器同时提供服务,,一个请求落到A服务器创建了session,如何使B也能读到session数据?
可行的方案:
a. 使用cookie存包含完整session的数据,不太可行,安全问题和大小限制
b. 使用一台服务器(如负载均衡),单机处理识别,并生成session转发给其他所有服务器,这个会产生宕机丢失问题,失去了分布式的高可用性。
c. 服务器之间增加session同步机制,这个随着机器数量的上升会压力增大,同样每个都保存会使内存占用大
d. 使用一个session服务器集中管理,采用什么方式存储,什么方式提供服务对外界服务器都是透明的。
gg. solution
使用cookie存sessionid,将隐私字段存在客户端session,使用web storage将数据保存在本地,减少cookie中不必要的数据传递