一、HttpSession对象
Session和Cookie是HTTP协议无状态的两种解决方案
•Cookie将数据保存在客户端:
①服务端创建Cookie,将Cookie添加到响应对象中
②响应回到浏览器,浏览器会自动存储Cookie中的数据
③浏览器再发起请求时自动带着Cookie中的数据
•Session将数据保存在服务器端
●特点
•Session技术解决用户发送不同请求时数据共享的问题
•一个浏览器在服务器中只会创建一个Session对象。不同用户的Session对象之间是互相独立的
•服务器中创建Session对象,创建完成后会将Session对象的Id(JSESSIONID)以Cookie的形式保存在客户端(浏览器),用户再次发请求时,会携带该Cookie,也就是JSESSIONID到服务器,服务器会根据该id找到用户的Session对象
•用户JSESSIONID的Cookie丢失或者服务器中存储的Session对象被销毁,服务器接收到用户的请求后,如果找不到对应的Session对象,会重新创建,并将新的JSESSIONID以Cookie的形式保存到浏览器中
•存储SESSIONID的Cookie不需要手动创建,Session对象创建完成,Tomcat服务器会自动创建Cookie,将JESSIONID存储在Cookie中响应回浏览器。
•Cookie默认的有效期为一次会话(浏览器不能关闭),浏览器关闭,Cookie即失效
•Session对象在Tomcat服务器的默认有效期为30分钟
•注意:
不要访问jsp(默认访问index.jsp),jsp会自动创建Session对象
关闭自动访问jsp
Servlet不会自动创建Session对象,需要使用Session对象,必须手动获取。
●Session的使用
•HttpSession的创建
Httpsession session = req.getsession();
•特点:
①如果请求的Cookie中携带了JSESSIONID,则根据JSESSIONID找对应的Session对象
找到,返回该Session
没有找到,创建新的Session对象,会将JSESSIONID存储在Cookie中响应回浏览器
•如果请求中没有携带JSESSIONID,则会创建一个Session对象,会将JSESSIONID存储在Cookie中响应回浏览器
•服务器中能找到对应的Session对象,那就使用该Session对象,如果找不到,就会新创建。
•HttpSession存储数据
session.setAttribute("user", user);
•HttpSession获取数据
session.getAttribute("user");
• HttpSession的销毁方式
HttpSession的销毁方式有两种:
①达到超时时间后会销毁,默认30分钟,时间的计算方式是根据最后一次请求时间作为起始时间开始计算
Tomcat服务器的conf/web.xml文件中配置HttpSession的超时时间。这个文件是所有项目web.xml的父文件,不建议修改web.xml
②调用HttpSession对象中的invalidate()方法销毁
•客户端关闭浏览器后,再次打开浏览器并发起请求,由于存储JSESSIONID的Cookie会销毁,服务器会重新创建Session对象。服务器端的旧的Session对象还在,存储的数据也在,过了超时时间后,就销毁了
●HttpSession对象总结
•Session和Cookie的区别:
① Cookie数据存储在客户端,而HttpSession中的数据存储在服务器
② Cookie不安全,而HttpSession是安全的
③单个cookie保存的数据不能超过4KB,很多浏览器都限制一个域名保存cookie的数量
HttpSession没有容量以及数量的限制,随着Session中存储的内容增多,会比较占用服务器内存,Session不存放业务数据
④ Cookie的数据都以字符串的形式保存。Session中可以保存对象
•Session和Cookie的关系:Session依赖于Cookie
二、ServletContext对象
•ServletContext对象,在一个web项目中只创建一次,所有用户都可以获取及使用,可以实现不同用户请求的数据共享
•获取ServletContext对象,在JSP中也叫Application对