前言
HTTP协议是无状态的,服务器是无法判断这一次的请求和上一次的请求是否是同一请求是否来自同一客户端,我们通常是利用cookie和session来判断的。
cookie
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。它保存于客户端。
session
session一般被称为会话,其实就是HttpSession,通过HttpServletRequest获取。
Session是在服务器端保存用户数据。
浏览器第一次发送请求时,服务器自动生成了Session ID来唯一标识并放入cookie并将其通过响应发送到浏览器。
浏览器再次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的Session ID进行对比,去寻找时候有对应的session。
session有效期的缺省值为30分钟,可以修改。
联系与区别
cookie和session都可以用来存储用户信息,使得服务器能够分辨是否是同一用户。但是cookie的数据是存在客户端的,session是存在服务端的。
cookie是不安全的,可以进行分析cookie或进行cookie欺骗,session就比较安全的。
cookie的默认有效期是关闭浏览器窗口就失效,此时的cookie信息是保持在内存中,如果设置了有效期,则会将数据保存在客户端硬盘中,直到到了有效期才会失效。session的默认时间是30分钟,可以修改,最少为一分钟。而session的信息是存在服务端的。
单个cookie的大小最多为3k,因此,不能存储太多的信息。
cookie会在一段时间内保存用户信息,当一段时间有太多的并发量,会造成服务器压力太大,影响服务器性能。
session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。一般不考虑这种情况。这不是我没得程序员的问题。
建议:将重要的信息放在session中,不重要的放在cookie中。