• JavaWeb之Session的简单使用!!!


    session使用

    1.服务器端会话跟踪技术:将数据保存在服务器端

    底层基于cookie实现封装的

    2.常用的API:

    声明session:HttpSession session = req.getSession();

    添加属性: session.setAttribute(k,v) session存入值 key=name,value '小明'

    1. /*
    2. * Copyright (c) 2020, 2023, All rights reserved.
    3. *
    4. */
    5. package cn.sessionTest;
    6. import jakarta.servlet.ServletException;
    7. import jakarta.servlet.annotation.WebServlet;
    8. import jakarta.servlet.http.*;
    9. import java.io.IOException;
    10. import java.io.PrintWriter;
    11. /**
    12. *

      Project: scl-cookie - GetSessionA

    13. *

      Powered by scl On 2023-09-04 20:08:20

    14. *

      描述:

    15. *
    16. * @author 孙臣龙 [1846080280@qq.com]
    17. * @version 1.0
    18. * @since 17
    19. */
    20. @WebServlet("/getSessionA")
    21. public class GetSessionA extends HttpServlet {
    22. @Override
    23. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    24. HttpSession session = req.getSession();
    25. System.out.println(session.getId());
    26. session.setAttribute("name","scl");
    27. Cookie c = new Cookie("JSESSIONID",session.getId());
    28. c.setMaxAge(60*60); //1个小时有效期
    29. resp.addCookie(c);
    30. PrintWriter writer = resp.getWriter();
    31. writer.println("ok");
    32. writer.close();
    33. }
    34. }

    获取session中的属性:   Object session.getAttribute(k) 获取到session中的值

    1. /*
    2. * Copyright (c) 2020, 2023, All rights reserved.
    3. *
    4. */
    5. package cn.sessionTest;
    6. import jakarta.servlet.ServletException;
    7. import jakarta.servlet.annotation.WebServlet;
    8. import jakarta.servlet.http.*;
    9. import java.io.IOException;
    10. import java.io.PrintWriter;
    11. /**
    12. *

      Project: scl-cookie - GetSessionB

    13. *

      Powered by scl On 2023-09-04 20:11:25

    14. *

      描述:

    15. *
    16. * @author 孙臣龙 [1846080280@qq.com]
    17. * @version 1.0
    18. * @since 17
    19. */
    20. @WebServlet("/getSessionB")
    21. public class GetSessionB extends HttpServlet {
    22. @Override
    23. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    24. HttpSession session = req.getSession();
    25. System.out.println(session.getId());
    26. String name =(String) session.getAttribute("name");
    27. PrintWriter writer = resp.getWriter();
    28. writer.println("sessionValue:"+name);
    29. writer.close();
    30. }
    31. }

    清除session中的数据:    removeAttribute(k) 删除我们的session中对应的key

    清空session(对应的sessionid也会清除):session.invalidate();

    session原理

    1.当我们客户端发送请求达到服务器端时创建session,会得到一个sessionid,在将该

    sessionid 响应在响应头

    2.客户端(浏览器)接受响应头中的sessionid ,会将该sessionid的值 存放在浏览器中。

    session本质上就是基于cookie实现封装的。

    3.使用同一个浏览器发送请求时,访问通一个服务器端,会在请求头中设定该sessionid 的值,服务器端就会从请求头中获取到该sessionid 查找对应session。

    session 数据存放在服务器端 cookie将数据存放在本地。

    session细节

    1.当客户端关闭后,服务器不关闭的话,获取到的session是否是同一个。因为客户端关闭后,cookie对象被销毁,客户端请求服务器会创建新的session。如果需要相同,可以设置cookie的最大存活时间,让cookie持久化保存两次获取Session是否为同一个

    2.在默认情况下,不是同一个。如果需要两个Session相同,则可以创建一个Cookie对象,key为:JSESSIONID,设置一下最大存活时间,让Cookie持久化保存Session的ID,就可以实现客户端关闭,两次获取Session就是同一个。

    1. Cookie c = new Cookie("JSESSIONID",session.getId());
    2. c.setMaxAge(60*60); //1个小时有效期
    3. response.addCookie(c);

    session与cookie区别

    1.session用于存储一次会话的多次请求的数据,存在服务器端;

    2.session可以存储任意类型,任意大小的数据。

    session与Cookie的区别:

    1.session存储数据在服务器端,Cookie在客户端;

    2.session没有数据大小限制,Cookie有数据大小限制;

    3.session数据安全,Cookie相对于不安全。

  • 相关阅读:
    Davinci Developer Classic SWC新建port并连接非complete port方式
    关于数据中心的设计方案,数据中心网络规划设计
    MATLAB图像处理入门
    代理IP在保护跨境商家网络安全中的重要作用
    java计算机毕业设计网上教学管理系统源代码+数据库+系统+lw文档
    Unity之PUN实现多人联机射击游戏的优化(Section 2)
    Java FileWriter.write()方法具有什么功能呢?
    EasyExcel
    第六部分--模板
    文件包含之日志中毒(User-Agent)
  • 原文地址:https://blog.csdn.net/qq_64847107/article/details/132710194