Session&Cookie(2)重要

什么是session

1) 服务器会给每个用户(浏览器)创建一个session对象

2)一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在

3)用户登录之后,整个网站它都可以访问 。-->保存用户的信息;保存购物车的信息

 

 

session中的方法

 

测试代码:

 

 

 

 

 

session和cookie的区别:

1)cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)。session是把用户的数据写入到用户独占session中,服务端保存(保存重要的信息,密码,减少服务器资源的浪费)

2)session是由服务器创建

 

session使用场景:

1)保存一个登陆用户的信息

2)购物车信息

3)在整个网站中经常会使用的数据我们将它保存在session中

 

使用session

1)Demo01:

复制代码
 1 public class SessionDemo01  extends HttpServlet {
 2     @Override
 3     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 4        // 解决乱码问题
 5         resp.setCharacterEncoding("UTF-16");
 6         req.setCharacterEncoding("UTF-16");
 7         resp.setContentType("text/html;charset=utf-8");
 8 
 9         // 得到session
10         HttpSession session = req.getSession();
11 
12 
13         // 给cookie中存东西
14         session.setAttribute("name",new Person("尹雄",1));
15 
16 
17         // 获取session的id
18         String id = session.getId();
19 
20         // 判断session是不是新创建的
21         if (session.isNew()) {
22             resp.getWriter().write("session创建成功,sessionID为" + id);
23         } else {
24             resp.getWriter().write("session已经在服务器中存在,sessionID为" + id);
25         }
26 
27         // session创建的时候做了什么
28         Cookie cookie = new Cookie("JSESSIONID", id);
29         resp.addCookie(cookie);
30 
31 
32     }
33 
34     @Override
35     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
36         doGet(req, resp);
37     }
38 }
复制代码

2)Demo02

复制代码
 1 public class Person {
 2     private String name;
 3     private int age;
 4 
 5     public Person() {
 6     }
 7 
 8     public Person(String name, int age) {
 9         this.name = name;
10         this.age = age;
11     }
12 
13 
14     public void setName(String name) {
15         this.name = name;
16     }
17 
18     public void setAge(int age) {
19         this.age = age;
20     }
21 
22     public String getName() {
23         return name;
24     }
25 
26     public int getAge() {
27         return age;
28     }
29 
30     @Override
31     public String toString() {
32         return "Person{" +
33                 "name='" + name + '\'' +
34                 ", age=" + age +
35                 '}';
36     }
37 }
复制代码
复制代码
public class SessionDemo02  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解决乱码问题
        resp.setCharacterEncoding("UTF-16");
        req.setCharacterEncoding("UTF-16");
        resp.setContentType("text/html;charset=utf-8");

        // 得到session
        HttpSession session = req.getSession();

        Person person = (Person) session.getAttribute("name");
        System.out.println(person);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
复制代码

 

3)Demo03

复制代码
 1 public class SessionDemo03 extends HttpServlet {
 2     @Override
 3     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 4         HttpSession session = req.getSession();
 5         session.removeAttribute("name");
 6         // 手动注销session
 7         session.invalidate();
 8     }
 9 
10     @Override
11     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
12         doGet(req, resp);
13     }
14 }
复制代码

 

自动注销session

在web.xml中

<!--    设置session失效时间-->
    <session-config>
<!--    1分钟后,session自动失效,以分钟为单位-->
        <session-timeout>1</session-timeout>
    </session-config>

问题:

servlet中request内置对象是封装了客户端发给服务端的请求数据,也是只能操作客户端提交过来的数据
但是session对象是在存在服务端的,为啥获取session是用request获取,而不是response呢?

 解答:

因为服务端虽然存session,但是不知道session和哪个客户端对应,所以必须客户端request的时候携带个session id,服务器端才能通过该id找到对应的session和客户端关联。所以服务器端单纯获得session没意义,因为不知道是哪个客户端的,只有从客户端来获取session才有意义。

 

posted on   Love&Share  阅读(58)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示