1.HttpSession
1). HttpSession:在服务器端保持HTTP状态的方案。和其对应的是Cookie
2). 产生HttpSession对象的过程:当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求是否包含一个session标识(即sessionID),如果已经包含一个sessionId则说明已经创建了一个session,服务器就按照sessionID把这个session检索出来使用,如果检索不到,可能会新建一个,这种情况可能出现再服务器端已经删除了该用户对应的session对象,但用户人为地在请求的url后面附加上一个jession的参数)。如果客户端请求不包含sessionid,则为此客户创建一个Session并且生成一个与此session相关联的sessionid,这个sessionid将在本次响应中返回给客户端保存。
3)使用Cookie来跟踪Session:session通过sessionid是以cookie或url重写为基础的,默认使用cookie来实现,系统会创建一个名为JESSIONID的输出cookie,这称之为session cookie,session cookie是存储于浏览器内存中的,并不是写到硬盘上,
2.HttpSession的生命周期:
1).什么时候创建:
1.是否浏览器访问服务端的任何一个jsp或servlet,服务器都会创建一个Session对象呢
答:不一定,
a、若当前的jsp是客户端访问的当前web应用的第一个资源,且jsp的page指定的session属性值为false,
则服务器不会创建session对象
b、若当前的jsp不是客户端访问的当前web应用的第一个资源,且其他页面已经创建了HttpSession对象,则当前页面返回
一个HttpSession对象,而不会创建一个新的HttpSession对象
c、对于servlet:若servlet是客户端访问的第一个web应用的资源,则只有调用了request。getSession()或request.getSession(true)
2).session="false" 表示:当前jsp页面禁用session隐含变量,但是可以自己显式定义HttpSession对象
3).什么时候销毁:
a.直接调用HttpSession的invalidate()方法
b.服务器卸载了当前web应用
c.超出HttpSession的过期时间,session的最大存活时间(默认是30分钟,1800秒),可以自己设置
局部: session.setMaxInactiveInterval(30);//设置session的最大存活时间
全局:tomcat服务器中的 web.xml,单位:分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4).并不是关浏览器就销毁了session
3.session API
1).cookie中设置session 参数
//创建一个cookie
Cookie cookie=new Cookie("JESSIONID",session.getId());
//设置cookie的最大时间
cookie.setMaxAge(20);
//添加cookie
response.addCookie(cookie);
2)
//获取sessionID
session.getId();
//判断session是否是新创建的
session.isNew()
//获取session的最大存活时间
session.getMaxInactiveInterval()
//获取session创建时间
session.getCreationTime()
//获取上次访问该session的时间
session.getLastAccessedTime()
//session添加参数
session.setAttribute("username", request.getParameter("username"));
//获取session中参数
session.getAttribute("username")
//session失效
session.invalidate();