Session的概述
- (1)什么是Session?
Session技术就是在服务端存取会话的数据 - (2)有什么特点?
存取key-value
数据有存活时间
每个Session的jsessionId不同
Session的原理
原理:
1》 服务器为浏览器分配一种对象叫session
2》每个session有id,可以存key-value
3》为了每个浏览器访问自己的数据不受他人影响,必须让Session有jessionId
Session存取数据
- (1)获取Session
HttpSession getSession() 获取session对象 - (2)存数据
setAttribute(key,value) - (3)读数据
getAttribute(key)
src\com\wzx\pack01_set\Demo01SetServlet.java
存数据
@WebServlet("/set")
public class Demo01SetServlet 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();
//2 获取session的编号jsessionId
String jsessionId = session.getId();
response.getWriter().println(jsessionId);
//3 保存key-value
session.setAttribute("name","jack");
session.setAttribute("age","20");
}
}
src\com\wzx\pack01_set\Demo02GetServlet.java
@WebServlet("/get")
public class Demo02GetServlet 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
src\com\wzx\pack02_session_persister\Demo03SetServlet.java
-
每次关闭浏览器,再访问项目,服务器会分配一个新的sessionId
如果关闭浏览器之后,再启动,想访问到之前的session的数据
有一个要求,使用cookie,将sessionId保存到浏览器,浏览器在访问项目时 会自动将sessionid放到请求头中。 -
getSession()先根据jsessionId查找是否之前有session存在,如果有就重用该session,否则就创建一个新的。
-
Cookie cookie = new Cookie("JSESSIONID",jsessionId); 参数名必须是JSESSIONID
@WebServlet("/set_jsessionId")
public class Demo03SetServlet 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);
}
}
Session的失效
session.invalidate(); //让session失败,原来里面的数据都没有了
@WebServlet("/clear")
public class Demo04SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//invalidate()清除失效
HttpSession session = request.getSession();
session.invalidate();
}
}
Session的钝化与活化(了解)
- tomcat 中关闭服务会自动把session持久化 也叫钝化,反之叫活化
- 本持是将session数据 存储在work目录下的一个session.ser
- 使用idea发布工程的朋友查看log控制台找work目录
我的文件下如下