2019-07-18 cookie和session

一、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采用的就是这种方式,但是也可以替换成其他形式。

你可能感兴趣的:(2019-07-18 cookie和session)