1、Session是什么?
Session是一个接口(HttpSession)
Session是一个会话,用来维护客户端和服务器之间关联的一种技术
每个客户端都有自己的一个Session会话技术
Session会话中,经常用来保存用户登录之后的信息(在服务器端保存)
2、创建Session和获取(id号,是否为新)
获取和创建Session的API是一样的
request.getSession()
第一次调用是创建Session会话
之后的调用都是获取之前创建好的Session对象
isNew():判断是不是刚创建出来的(新的)
true表示刚创建
false表示获取之前就创建出来了
每个会话都有一个id,这个id是唯一的
getId()可以得到Session对象的id值
html代码示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="http://localhost:8080/Cookie_Session/">
<title>Session</title>
<style type="text/css">
ul li {
list-style: none;
}
</style>
</head>
<body>
<iframe name="target" width="500" height="500" style="float: left;"></iframe>
<div style="float: left;">
<ul>
<li><a href="sessionServlet?action=createOrGetSession" target="target">Session的创建和获取(id号、是否为新创建)</a></li>
<li><a href="" target="target">Session域数据的存储</a></li>
<li><a href="" target="target">Session域数据的获取</a></li>
<li>Session的存活</li>
<li>
<ul>
<li><a href="" target="target">Session的默认超时及配置</a></li>
<li><a href="" target="target">Session3秒超时销毁</a></li>
<li><a href="" target="target">Session马上销毁</a></li>
</ul>
</li>
</ul>
</div>
</body>
</html>
web.xml文件记得配置一下
package com.eastwind.servlet;
/*
@author zhangJH
@create 2023-06-26-9:35
*/
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class SessionServlet extends BaseServlet {
// 创建和获取Session
protected void createOrGetSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 创建session对象
HttpSession session = request.getSession();
// 判断session对象是否是新创建的
boolean aNew = session.isNew();
// 获取session对象的id
String id = session.getId();
response.getWriter().write("创建的session对象为" + session + "<br/>");
response.getWriter().write("session对象是否是新创建的" + aNew + "<br/>");
response.getWriter().write("session对象的id" + id + "<br/>");
}
}
在第一次点击时是true,后续都不会是新创建的了,后面的结果都是false
如果一直是false的,是因为cookie有缓存了,把cookie清一下就行了
3、Session域中的数据存取
与其他域中的方式是一样的
4、Session的生命周期
public void setMaxInactiveInterval(int interval) 设置Session的超时时长(以秒为单位),超过指定的时长,Session就会被销毁
public int getMaxInactiveInterval() 获取Session的超时时长
Session的默认超时时长为30分钟(1800秒)
只需要在web.xml文件中修改
<session-config>
单位是分钟
<session-timeout>60</session-timeout>
</session-config>
如果想单独的设置超时时长,需要使用setMaxInactiveInterval()这个方法,以秒为单位使用
Session的超时概念图
当你设置了session的超时时长后,又获取了Session对象,那么超时时长将会被重置
负数不做演示,这里输入0没有用,因为Session有一个单独的API是用来立刻删除
public void invalidate():让session立刻超时,等同于Cookie的数值0
protected void deathLife(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate(); // 使会话立刻超时
}