介绍
HttpSession接口来自于Servlet规范中。HttpSession接口实现类由Http服务器厂商提供。HttpSession接口修饰对象被称为会话作用域对象。如果两个Servlet为同一个用户/同一个浏览器提供服务,此时可以借助于用户的HttpSession对象进行数据共享。
Cookie类和HttpSession接口的区别
类型不同:Cookie是一个类,HttpSession是一个接口。存放位置不同:Cookie存放在客户端计算机,HttpSession存放在服务端计算机内存。存放共享数据个数不同:一个cookie对象只能存储一个共享数据,一个会话作用域对象通过map存储,因此可以任何个共享数据。存放数据类型不同:cookie只能存放String类型的共享数据,会话作用域对象存放Object类型的共享数据。与用户关系:一个用户可以拥有多个cookie,一个用户只能拥有一个会话作用域对象。参照物不同:cookie相当于用户在服务端拥有的会员卡,会话作用域对象相当于用户在服务端拥有的私人储物柜。
应用举例
代码部分
package com.songzihao.controller;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
/**
*
*/
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用请求对象向Tomcat索要当前用户的私人储物柜
HttpSession session=request.getSession();
//将共享数据添加到当前用户的私人储物柜
session.setAttribute('key1',500);
}
/**
* tomcat将当前用户的柜子编号以cookie形式写入响应头
* cookie('JSESSIONID',柜子编号)
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
package com.songzihao.controller;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
/**
*
*/
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用请求对象向Tomcat索要当前用户的私人储物柜
HttpSession session=request.getSession(false);
//读取OneServlet存入的共享数据
Integer data= (Integer) session.getAttribute('key1');
System.out.println('TwoServlet得到的共享数据===' + data);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
OneServlet
com.songzihao.controller.OneServlet
OneServlet
/one
TwoServlet
com.songzihao.controller.TwoServlet
TwoServlet
/two
5
运行结果部分
工作原理
在代码部分中,我们可以看到OneServlet中调用的是request.getSession();TwoServlet中调用的是request.getSession(fals;这两个方法肯定是有区别的,下面我们来看一下:request.getSession():如果当前用户在服务端拥有私人储物柜,要求tomcat返回这个储物柜。如果当前用户在服务端尚未拥有私人储物柜,要求tomcat为当前用户创建一个全新的私人储物柜。request.getSession(fals:如果当前用户在服务端拥有私人储物柜,要求tomcat返回这个储物柜。如果当前用户在服务端尚未拥有私人储物柜,要求tomcat返回null。如果当前用户身份【经过登录验证审核判定为合法】,此时应该使用request.getSession()来索要私人储物柜。如果当前用户身份尚未确认合法,此时应该使用request.getSession(fals来索要私人储物柜。
HttpSeesion创建的session对象的销毁时机
在浏览器关闭时,切断了用户与浏览器之间联系。但是tomcat是服务端计算机中资源调度软件无法侦测浏览器何时关闭的,因此在浏览器关闭时,服务端是不会销毁用户的session。tomcat在创建session对象时,设置一个【最大空闲时间】。如果session对象从上次使用完毕到现在空闲时间达到了【最大空闲时间】,tomcat认为用户放弃了自己的sessio此时tomcat负责销毁。tomcat设置【最大空闲时间】是30分钟。在wexml文件中,自定设置session的最大空闲时间:
5
文章为作者独立观点,不代表股票交易接口观点