一:会话技术简介
二:cookie技术
cookie是将用户的信息保存在客户端的会话技术
创建cookie的条件:
图解cookie的存储过程
三:session技术
session出现的原因是:服务端返回给客户端的cookie过多,服务端和客户端的进行传输通信增加,影响性能,session的出现就是为了解决这一问题。在客户端域服务端进行交互的时候,不必要每次都返回cookie,只需要给客户端一个唯一标识的id即可(JSESSIONID),这个ID值就是name为JSESSIONID的cookie。
session会话技术是存储在服务端的会话技术。客户端每次访问时,会在服务端创建一小块内存,用来保存客户端的信息,要求客户端携带JSESSOIONID去寻找属于自己的一小块内存。session需要借助cookie存储的JSESSIONID值。问题是:如果存储的session过多,造成服务端的压力过大,效率降低。
1.获取session
HttpSession session = request.getSession();
这句话是获得属于当前会话的session对象。如果该session对象已经存在,就直接返回;如果不存在,就会创建新的session对象返回(原理是:根据客户端携带的JSESSIONID寻找服务端是否有该session)
2.向session对象中存取数据
因为session是域对象,所有有通用的三个方法
session.setAttribute(String ,string)
session.getAttribute(String)
session. removeAttribute(String)
3.session对象的生命周期
创建:执行request.getSession()开始创建session对象
销毁:
(1)session过期,默认30分钟,
(2)在服务器(非正常)关闭时销毁。
(3)手动销毁session:使用session.invalidate();
作用范围:默认在一次会话中,也即在一次会话中的所有资源共用一个session对象
浏览器关闭不等于session销毁!!! 因为session技术是基于cookie技术实现,重启浏览器在次访问原来的连接依然会创建新的session对象。因为cookie默认在浏览器关闭时消失,也就意味着JSESSIONID找不到了。但是原来的session对象还在服务端存储,只是再也找不到了(没有了JSESSIONID),只有等到session自动销毁。
图解session的存储过程
总结:session和cookie都是为了保持(记录)用户的访问状态,一方面是为了业务功能的简单实现,另一方面是为了简化服务端程序设计。
分布式session:解决的是session共享的问题。例如在tomcat下有两个应用:web1和web2,访问web1会创建一个session对象session1,访问web2会创建session对象session2,在不同的应用中session是不共享的,要想解决session共享,就需要考虑使用分布式session解决。