本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。
简述:
Session是服务器端会话技术,能够在一次会话的多次请求间共享数据,将数据保存在服务端对象中。
原理:
Session的实现是依赖于Cookie的,当我们第一次创建Session对象时,服务器会给Session对象分配一个唯一的ID叫做SESSIONID,并把该值(SESSIONID=xxxxx)以Cookie的形式响应到客户端浏览器上,当我们第二次访问时,客户端浏览器会把第一次保存的Cookie信息即SESSIONID发送给服务器,服务器拿到SESSIONID并通过该ID在内存中查找并返回。
功能:
HttpSession request.getSession():
获取HttpSession对象。Object getAttribute(String name):
通过key值获取域中属性。void setAttribute(String name, Object value):
设置session域中属性。void removeAttribute(String name):
通过key移除域中属性。session.invalidate():
销毁session对象。String session.getId():
获取Session对象的ID值。
思考:
- 当客户端关闭后,服务器不关闭,两次获取的session是否是同一个?
- 默认情况下,两次获取的不是同一个Session对象。
- 如果需要相同,我们可以通过修改Cookie值中的SESSIONID的存活时间,让Cookie持久化保存,例如我们将存活时间设置为1小时。
new Cookie("JSESSIONID",session.getId()).setMaxAge(60*60); //发送cookie对象 response.addCookie(c);
- 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
- 因为Session是保存在服务器的,所以一般来说不是同一个,但是要确保数据不丢失,tomcat自动完成以下工作
- Session钝化:在服务器正常关闭之前,将session对象序列化到硬盘上。
- Session活化:在服务器启动后,将Session文件转化为内存中的Session对象即可。
- 因为Session是保存在服务器的,所以一般来说不是同一个,但是要确保数据不丢失,tomcat自动完成以下工作
- Session在什么时候被销毁?
- 在服务器关闭时,就会销毁。
- 调用session.invalidate()。
- session默认失效时间为30分钟。可以在服务器的配置文件中配置。如tomcat中的web.xml文件。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- session的特点?
- session用于存储一次会话中的多次请求的数据,存储在服务器中。
- session可以存储任意类型,任意大小的数据。
- Session与Cookie的区别?
- session存储在服务器端,而cookie存储在客户端。
- session没有数据大小限制,而cookie针对于不同浏览器客户端有不同的限制。
- session相对来说比较安全,而cookie因其存储在服务器相对来说不安全。