Session【重点】
概述
Session是保存在服务器端的一个会话控制对象,保留浏览器访问当前服务器提供的资源和必要信息。允许浏览器多次访问情况下,都可以获取到对应的Session信息。
浏览器使用Cookie保存Session的核心数据 Session ID号!!!
Cookie和Session对比:
Cookie数据
个数限制,数据方式限制(String类型键值对),不支持中文,数据量限制4KB
Session数据
1. 服务器保存Session数据的个数没有限制
2. Session存储数据的方式是键值对形式,键是String类型,但是值可以是任意类型。Session可以看做是一个Map双边队列 ==> HashMap<String, Object>
3. 中文没问题
4. 数据量也是没有问题,但是多多少少克制一下。
Session 工作原理
Session会话技术是依托于Cookie
1. 浏览器第一次访问对应的服务器,服务器会根据当前访问的时间,其他参数生成一个Session ID号,这个ID号是不可以重复的!!!
2. 利用Cookie技术,服务器将Session ID号发送给浏览器保存
3. 浏览器第二次访问对应的服务器,会带有Session ID号的Cookie访问对应的资源,服务器可以根据Session ID 找到对应的Session,从Session获取对应的数据。
4. 浏览器如果关闭Cookie技术,Session使用时非常麻烦,需要利用URL重写技术
5. 浏览器本地保存Session ID的cookie JSESSIONID 名字固定
常用方法
// 【重点】获取Session对象,如果没有创建一个新的Session【通过请求对象】
HttpSession getSession();
// 【重点】参数为true,获取对应请求的Session对象,如果没有创建一个新的Session。参数为false,只会获取对应当前请求的Session,没有返回null
HttpSession getSession(boolean var1);
// 获取 session 的 id
String getId();
// 获取最后一次的访问时间
long getLastAccessedTime();
// 【重点】设置 session 过期时间
void setMaxInactiveInterval(int var1);
// 获取过期时间
int getMaxInactiveInterval();
// 【重点】设置属性,如果当前属性名已存在则替换属性值,类似Map中的put方法
void setAttribute(String var1, Object var2);
// 【重点】获取对应参数的值
Object getAttribute(String var1);
// 【重点】移除对应的属性
void removeAttribute(String var1);
// 【重点】销毁Session
void invalidate();
使用
创建 Session
/**
* 测试 session
*/
@WebServlet("/CreateSession")
public class CreateSessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 获取 session 对象,因为当前没有,所以不带参数或者加上 true
HttpSession session = request.getSession();
// 设置参数
session.setAttribute("name", "中文");
// 获取 session 的 id
System.out.println("getID:" + session.getId());
// 设置 session 过期时间
session.setMaxInactiveInterval(120);
}
}
获取 Session
/**
* 测试获取 session
*/
@WebServlet("/GetSession")
public class GetSessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 获取 session 对象,因为当前没有,所以不带参数或者加上 true
HttpSession session = request.getSession(false);
// 非空判断
if (session != null) {
// 获取session中属性对应的值
System.out.println("name:" + session.getAttribute("name"));
// 获取 session 的 id
System.out.println("getID:" + session.getId());
// 获取最后一次的访问时间
long lastAccessedTime = session.getLastAccessedTime();
System.out.println(lastAccessedTime);
// 获取 session 过期时间
System.out.println(session.getMaxInactiveInterval());
// 获取 session 创建时间
System.out.println(session.getCreationTime());
// 删除 session 中键为 name 的键值对
session.removeAttribute("name");
} else {
System.out.println("session 为空");
}
}
}
销毁 Session
/**
* 测试销毁Session
*/
@WebServlet("/DestroySession")
public class DestroySessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 获取 session 对象,因为当前没有,所以不带参数或者加上 true
HttpSession session = request.getSession(false);
// 非空判断
if (session != null) {
// 获取session中属性对应的值
System.out.println(session.getAttribute("name"));
// 获取 session 的 id
System.out.println("getID:" + session.getId());
// 销毁 session 对象
session.invalidate();
} else {
System.out.println("session 为空");
}
}
}
版权属于:不冷
本文链接:https://www.buleng.xyz/archives/100/
转载时须注明出处及本声明