什么是Session会话?
1.Session就是一个接口(HttpSession)。
2.Session就是会话,它是用来维护一个客户端和服务器之间关联的一种技术。
3.每个客户端都有自己的一个Session会话。
4.Session会话中,我们经常用来保存用户登录之后的信息。
如何创建Session和获取(id号,是否为新)
如何创建和获取Session,他们的API是一样的。
request.getSession()
第一次调用时,创建Session会话。
之后调用都是,获取前面创建好的Session会话对象。
isNew():判断到底是不是刚创建出来的(新的)
true 表示刚创建
false 表示获取之前的创建
每个会话都有一个身份证号,也就是ID值,而且这个ID是唯一的。
getId()得到Session的会话Id值。
protected void createOrGetSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建和获取Session会话对象
HttpSession session=request.getSession();
//判断 当前Session会话,是否是最新创建出来的
boolean isnew=session.isNew();
//获取session会话的唯一标识id
String id=session.getId();
response.getWriter().write("得到的Session,它的id:"+id+"<br/>");
response.getWriter().write("这个Session是否是新创建的:"+isnew+"<br/>");
}
Session域数据的存取
protected void setAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("key1", "value1");
}
protected void getAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object attribute=request.getSession().getAttribute("key1");
response.getWriter().write("从Session中获取出key1的数据是:"+attribute);
}
Session生命周期控制
public void setMaxInactiveInterval(int interval) 设置Session的超时时间(以秒为单位),超过指定的时长,Session就会被销毁。
值为正数的时候,设定Session的超时时长。
负数表示永远不超时(极少使用)
立即销毁 invalidate() 让Session会话马上超时(session.invalidate())
public void getMaxInactiveInterval() 获取Session的超时时间
Session默认的超时时长为 1800秒(30分钟)
可以在web工程的web.xml文件中修改默认时间
如下:
<session-config>
<session-timeout>xx</session-timeout>
</session-config>
另外,如果想修改个别的Session的超时时长,就可以使用上面的API.setMaxInactiveInterval(int interval)进行修改
浏览器和Session之间关联的技术内幕
关闭浏览器Session没有了是因为关闭浏览器cookie没有了。getSession()找不到Session对象。