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 2021-04-06 22:55  Love&Share  阅读(56)  评论(0编辑  收藏  举报

导航