由于HTTP请求时无状态的,也就是说,即使第一次和服务器连接并登陆成功后,第二次请求连接,服务器仍然不知道当前请求的用户是哪个。
cookie:
cookie的出现就是为了解决这个问题。第一次登录后,服务器返回一些数据(cookie)给浏览器, 然后浏览器保存在本地。当该用户第二次请求时,浏览器就会自动把上次请求后存储的cookie一起发给服务器,服务器就能判断当前用户是哪个了。当用户关闭浏览器后,cookie将被清除。
session:
也是用于存储和用户相关的信息。
第一种方式:通过cookie存储一个session_id,然后具体的数据保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,用户下一次请求时就会携带该session_id,服务器根据session_id在session库中获取用户的session数据,这样就能判断用户是哪个,以及之前的状态信息。这种专业术语叫server side session。
第二种方式:将session数据加密,存储在cookie中。这种专业术语叫client side session。flask采用的就是这种方式。
区别:
- 安全来说,session更安全,不容易被窃取,cookie存储在客户端本地浏览器,session存储在服务端。
- 保存内容的类型来说,cookie只是保存字符串,而session可保存所有数据类型。
- 保存内容的大小来说,cookie存储数据量有限,单个cookie保存的数据不能超过4KB,用于存储少量数据,而session没有限制。
- 性能来说,session存储在服务端,当访问增多,会比较占用服务器的资源。