1,什么是Session
Session一般译为会话,是解决Http协议的无状态问题的方案,可以将一次会话中的数据存储在服务器端的内存中,保证在下一次的会话中可以使用。
在客户端浏览器第一次向服务器端发送请求时,服务器端会为这个客户端创建独有的Session,并具有唯一的Session ID,存储在服务器端的内存中。在客户端第二次访问服务器端时,会携带Session ID在请求中,服务器端会根据Session ID查找对应的Session信息,进行进一步地操作。
在JavaEE中提供了javax.servlet.http.HttpSession接口,通过该接口可以将共享的数据内容存储在HttpSession对象中,从而解决Http协议的无状态问题
2,Session与cookie的区别
Session与Cookie都是解决Http协议的无状态问题,但是两者之间还是存在一定区别的:
- Cookie数据存储在客户端的浏览器内存中或本地缓存文件中,Session数据存储在服务器端的内存中。
- Cookie数据存储安全性较低,Session数据存储安全性较高。
- Session数据存储在服务器端内存中,访问增多时,降低服务器端性能。而Cookie则不会对服务器端性能造成影响。
- 单个Cookie存储的数据最大是4KB,一个网站只能存储20个Cookie。Session则没有这个问题。
- Session在关闭浏览器时失效,而持久Cookie则可以存储更长有效时间。
总的来说,Session与Cookie各有优势,不能简单来说谁更优。具体用法要考虑具体案例情况而定。
3,Session的实现原理
在idea中使用上一个程序进行调试,访问servlet并抓取内容,最后发现实际得到的是org.apache.catalina.session.StandardSession对象,该对象是由Tomcat服务器的Session池创建,并为该对象创建唯一的ID值。
最后结论:
因为Session使用的是会话Cookie,所以当浏览器关闭后,Session会失效。重新打开浏览器访问对应Servlet时,服务器端会重新创建Session对象。可以使用持久Cookie来延长Session的有效时间。
3,Session的额生命周期
- Session的创建:在客户端第一次向服务器端发送请求,并执行request.getSession()方法时。
- Session的销毁:
- 不正常关闭浏览器时。(正常关闭浏览器,Session信息被序列化到硬盘中,保存在Tomcat服务器安装目录/work目录)
- Session信息过期时(Session默认的有效时间为30分钟)。
可以利用setMaxInactiveInterval(int interval)方法设置Session的有效时间。
-
- 在服务器端程序中执行session.invalidate()方法,手动销毁Session对象。
摘抄自:https://www.cnblogs.com/aaron911/p/7889353.html
由于还在初学阶段,对session的理解还不太透彻,只好通过别人已有的总结来理解session。