一、Cookie
1.存储在客户端,因为可以随意伪造,因此并不安全。
2.http是无状态的,不能每次打开链接都需要输入密码和用户名,为了能够分辨链接由谁来发起的,因此提出了cookie的机制
3. Cookie的主要内容包括:名字、值、过期时间、路径和域
二、Session
1.存储在服务器端的一种Key vlaue结构
2.浏览器第一次发来请求的时候,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。
3.由于服务器存储session需要资源占用,因此会设置一个时间限制,超过了这个时间限制就毁掉这个值
三、区别
存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。
Cookie限制了数据量大小为4k,session没有限制
Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。
域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。
四、二者的结合使用
1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。
网友评论