1.会话
用户打开一个浏览器,点击很多超链接,访问多个web资源,关闭浏览器的过程称为会话。
有状态会话:一个同学来过教室,下次再来,我们知道这个同学曾经来过,称之为有状态会话。例如直播网站等会记住你的登陆状态。
现实中证明身份:带上你的学生证;学校登记你来过;
那么服务端如何知道客户端来过?
- 服务端给客户端一个信件,客户端下次访问服务端带上信件就好,cookie
- 服务器登记你来过了,下次你来的时候我来匹配你,seesion
2.保存会话的两种技术
- 实现Cookie(开发中用不到):
客户端技术(使用响应对象去分发,请求对象去携带提供) - 实现Session:
服务器技术,利用这个技术,可以保存用户的会话信息。我们可以把信息或者数据放在session中。
3.细节
- 一个cookie只能保存一个信息;
- 一个cookie大小限制是4kb;
- 一个web站点可以给浏览器发送多个cookie,每个站点最多20个;
- 一个浏览器的cookie上限是300个;
- 不设置有效期,关闭浏览器,自动失效;或创建一个新的同名cookie,将其有效期设置为0,进行提交,就会立马失效;
- 如何传中文字符串,可能会有乱码问题,使用URLEncoder.encode(“中文”,”utf-8”)方法对value进行编码设置,接收到之后使用URLDecoder.decode(cookie.getValue(),”utf-8”)进行解码;也可以使用String()的重载方法,String(s,charset)进行编码方式的指定。
4.Session(重点)
什么是session?
- 服务器会给每一个用户(浏览器)创建一个session对象;
- 一个session独占一个浏览器对象,只要浏览器没关闭,这个session就一直存在于服务器上,不管开多少个页面,都是同一个ID的session;
- 用户登录之后,整个网站的其他页面都可以访问这个session;
- 可以手动invalidate注销session,也可以在web.xml中配置来设置自动注销时间。一般两者都用,重要信息手动注销,其他的不重要信息可以设置几个小时的有效期。
Session和cookie的区别: - Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- Session是把用户的数据写到用户独占的session中,服务器端保存(保存重要信息,减少服务器资源浪费)
- Session对象由服务器创建并保持,将ID发送给客户端,客户端发送request时携带ID;
- Cookie对象由服务器创建后将整个cookie发送给客户端,请求时携带;
- Cookie的构造方法参数是(String,String),只能存放两个字符串;
- Session可以存放对象;
使用场景: - 一般就用来保存用户信息、购物车的信息;
- 整个网站中经常使用的数据,保存在session中,去取就ok;