zoukankan      html  css  js  c++  java
  • 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才有意义。

  • 相关阅读:
    motion
    Owe Her
    优于自己的过去
    eclipse中开发js会卡,去掉.project中的validate即可
    项目经理的责任
    话不说满_话不说绝_要给自己留后路_留余地
    create table repo_folder_operate_log_bak as select * from repo_folder_operate_log;
    Introduction to Mathematical Thinking
    coursera 《现代操作系统》 -- 第十三周 期末考试
    coursera 《现代操作系统》 -- 第十一周 IO系统
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14624467.html
Copyright © 2011-2022 走看看