什么是session

  • 服务器会给每一个用户(服务器)创建一个session对象
  • 一个session独占一个浏览器 只要这个浏览器没有关闭 这个session一直存在
  • 示例:用户登录之后 整个网站都可以访问 (保存用户的信息)

image.png

Session和Cookie的区别

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • session把用户的数据写到用户独占的session中,在服务器端保存(保存重要的信息)
  • session对象由服务器端创建

使用场景

  • 保存一个登录用户信息
  • 购物车信息
  • 在整个网站中经常会使用的数据

使用session

  1. //获取session的ID 传如信息
  2. public class SessionDemo1 extends HttpServlet {
  3. @Override
  4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  5. doPost(req, resp);
  6. }
  7. @Override
  8. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  9. //解决乱码信息
  10. req.setCharacterEncoding("utf-8");
  11. resp.setCharacterEncoding("utf-8");
  12. resp.setContentType("text/html;charset=utf-8");
  13. //得到session
  14. HttpSession session = req.getSession();
  15. //给session中传入东西
  16. session.setAttribute("user",new Person("翠花", 18));
  17. String id = session.getId();
  18. //判断是不是新创建的
  19. if(session.isNew()){
  20. resp.getWriter().write("session创建成功,session的ID为:"+id);
  21. }else {
  22. resp.getWriter().write("session已经在服务器中存在了,ID为:"+id);
  23. }
  24. //session创建的时候做了什么事情
  25. //Cookie cookie = new Cookie("JSESSIONID", id);
  26. //resp.addCookie(cookie);
  27. }
  28. }
  29. //获取session中的值
  30. public class SessionDemo02 extends HttpServlet {
  31. @Override
  32. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  33. doPost(req, resp);
  34. }
  35. @Override
  36. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  37. //解决乱码信息
  38. req.setCharacterEncoding("utf-8");
  39. resp.setCharacterEncoding("utf-8");
  40. resp.setContentType("text/html;charset=utf-8");
  41. //获得session
  42. HttpSession session = req.getSession();
  43. resp.getWriter().write(session.getAttribute("user").toString());
  44. }
  45. }
  46. //手动删除session的信息 和注销session
  47. public class SessionDemo03 extends HttpServlet {
  48. @Override
  49. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  50. doPost(req, resp);
  51. }
  52. @Override
  53. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  54. HttpSession session = req.getSession();
  55. //删除session的属性
  56. session.removeAttribute("user");
  57. //注销session
  58. session.invalidate();
  59. resp.getWriter().write("操作成功");
  60. }
  61. }

web.xml中配置

  1. <!--配置session信息-->
  2. <!--session-timeout 设置session的过期时间-->
  3. <session-config>
  4. <!--15分钟后session自动过期 单位:分钟-->
  5. <session-timeout>1</session-timeout>
  6. </session-config>

Cookie和Session 像是箱子和钥匙的关系

  • Cookie的信息保存在客户端
  • Session的信息保存在服务器端 用户只能获得Session的ID 通过唯一的ID 访问session中的数据