前言
session它是一个域对象
三大域对象:ServletContext,Session,Request
注意:
由于客户端需要接收、记录和回送Session对象的ID,因此,通常情况下,Session是借助Cookie技术来传递ID属性的。
一,Session
(1)使用Cookie的问题:
1,最多存储4k字符串
2,存储数据不太安全
session的作用:在一次会话的多次请求之间共享数据,将数据保存到服务器
(2)HTTPSession也是一个域对象
void setAttribute(String name, Object value)
在session中保存数据
Object getAttribute(String name)
从session中获取数据
void removeAttribute(String name)
从session中移除数据
使用:
1. 将数据存储到session中
// 1.通过rquest对象,获取session对象
HttpSession session = request.getSession();
// 2.操作session的API,存储数据
session.setAttribute("username","哈哈,呵呵");
2. 从session中获取数据
// 1.通过rquest对象,获取session对象
HttpSession session = request.getSession();
// 2.操作session的API,获取数据
session.getAttribute("username");
code:
@WebServlet("/SetSession")
public class SetSession extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.通过rquest对象,获取session对象
HttpSession session = request.getSession();
// 2.操作session的API,存储数据
session.setAttribute("username", "哈哈,呵呵");
}
}
@WebServlet("/GetSession")
public class GetSession extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.通过rquest对象,获取session对象
HttpSession session = request.getSession();
// 2.操作session的API,获取数据
String username = (String) session.getAttribute("username");
System.out.println("GetSession获取:" + username);
}
}
(3)工作原理
Session基于Cookie技术实现
(4)Session细节
--1.客户端关闭,服务器不关闭
两次获取的Session数据是否为相同:
* 默认情况下,浏览器关闭,再次打开二次获取的session不一样
基于cookie实现(浏览器关闭,cookie销毁)
* 设置cookie的存活时间(JESSIONID)
这里我们代替服务器,做一个小操作,覆盖这个JSESSIONID,指定持久化时间
--2客户端不关闭,服务器关闭
两次获取的Session数据是否相同?
* 当服务器正常关闭,重启后,二次获取的session数据一样
tomcat这实现以下二个功能
钝化(序列化)
当服务器正常关闭时,session中的数据,会序列化到磁盘
活化(反序列化)
当服务器开启后,从磁盘文件中,反序列化到内存中
注意一个问题:Idea问题:
支持钝化,但是在重新启动的时候又会删除了钝化文件,所以导致会变,解决方法如下: