学session,看这一往篇就够了
文章目录
Session的原理:
原理:
- 服务器为浏览器分配一种对象叫session
- 每个session有id,可以存key-value
- 为了每个浏览器访问自己的数据不受他人影响,必须让Cookie存jessionld
Session存数据
-
获取Session
HttpSession getSession()获取session对象 -
存数据
setAttribute(key,value) -
读数据
getAttribute(key)
存session代码:
package com.lbl.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessionSetServlet")
public class SessionSetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//访问服务器,服务器为每个浏览器分配一个session,有自己的id
//1获取session对象
HttpSession session = request.getSession();
session.setAttribute("name","jack");
session.setAttribute("age","18");
//2获取session的编号jsession工d
String jsessionId = session.getId();
response.getWriter( ).println(jsessionId);
}
}
效果图:
##取session代码:
package com.lbl.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessionGetServlet")
public class SessionGetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1获取session对象
HttpSession session = request.getSession();
//2获取key对应的vaLue
String name = (String) session.getAttribute("name");
String age = (String) session.getAttribute("age");
System.out.println(name);
System.out.println(age);
}
}
效果图:
使用Cookie保存sessionID:
-
每次关闭浏览器,再访问项目,服务器会分配一个新的sessionld如果关闭浏览器之后,再启动,想访问到之前的session的数据有一个要求,使用cookie,将sessionld保存到浏览器,浏览器在访问项目时会自动将sessionid菜到请求头中。
扫描二维码关注公众号,回复: 11656055 查看本文章 -
getSession()先根据jsessionld查找是否之前有session存在,如果有就重用该session,否则就创建一个新的。
-
Cookie cookie = new Cookie("JSESSIONID",jsessionld);参数名必须是JSESSIONID
存的代码如下:
package com.lbl.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/sessionStoreServlet")
public class SessionStoreServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//打开浏览器,向服务器发一个jsessionID,让服务器根据jsessionID打开之前的session
//取里面的数据,得使用技术保存jsessionID在浏览器 Cookie
//1 获取session对象
HttpSession session = request.getSession();
//2 获取session的编号jsessionId
String jsessionId = session.getId();
//3 保存key-value
session.setAttribute("name","jack");
session.setAttribute("age","20");
response.getWriter().println(jsessionId);
Cookie cookie = new Cookie("JSESSIONID",jsessionId);
//存活时间
cookie.setMaxAge(10*60);
//项目地址
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
}
}
取的代码:
package com.lbl.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessionGetServlet")
public class SessionGetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1获取session对象
HttpSession session = request.getSession();
//2获取key对应的vaLue
String name = (String) session.getAttribute("name");
String age = (String) session.getAttribute("age");
System.out.println(name);
System.out.println(age);
}
}
运行效果:
关闭浏览器后,还可以再取到!
清除Session
使用session的session.invalidate();
方法可以清除session
完成代码如下:
package com.lbl.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessionClearServlet")
public class SessionClearServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session对象
HttpSession session = request.getSession();
//1:清除session
session.invalidate();
}
}
Session的钝化与活化
-
tomcat中关闭服务会自动把session持久化也叫钝化
-
本质是将session数据存储在work目录下的一个session.ser
-
使用idea发布工程的朋友查看log控制台找work目录:
图解: