服务端会话跟踪技术:将数据保存到服务端
JavaEE提供HttpSession接口,来实现一次会话的多次请求数据共享功能
使用:
1:获取session对象
2:session对象功能
void setAttribute(String name,Object o) :将数据存储到session中
Object getAttribute(String name) 根据键获取值
void removeAttribute(String name) 根据键,删除值
创建一个Servlet1存session
- 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("/a1")
- public class ServletSession extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();//获取Session对象
- String name="张三";
- session.setAttribute("username",name);
- }
- }
创建Servlet2取session
- 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("/b1")
- public class ServletSession2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();//获取Session对象
- Object username = session.getAttribute("username");
- System.out.println(username);
- }
- }
分别访问Servlet1,和Servlet2,控制台就会输出 张三,所有的域对象的功能大同小异
服务器重启后,Session中的数据是否还在
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入到硬盘的文件中(ctrl+c关闭)
活化:再次启动服务器后,从文件中加载数据到Session中(还会把文件自动删除)
1:默认情况下无操作,30分钟自动销毁(例如你长时间没有操作,系统提示你要重新登录)
- <session-config>
- <session-timeout>40session-timeout>
- session-config>
单位是分钟,在web.xml中配置
2:调用Session对象的 invalidate()方法 (注销功能)
Cookie和Session区别
Cookie和Session都是来完成一次会话多次请求之间数据共享的
区别:
存储位置: Cookie是将数据存储到客户端 Session 是将数据存储在服务器
安全性: Cookie不安全 Session 安全
数据大小 Cookie最大3k Session无限制
存储时间 Cookie可以长期存储 Session默认30分钟
服务器性能 Cookie不占用服务器资源 Session占用服务器资源
获取session创建时间
- //获取session创建时间
- long creationTime = session.getCreationTime();
- SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
- out.print(sf.format(creationTime));