cookie

cookie

  • cookie存的数据类型有限:字符串形式的键值对,浏览器中可以保存多个cookie(一般保存在本地,浏览器保存的cookie个数是有限的大概300个)

代码

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //设置请求和响应编码
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8");
    PrintWriter writer = resp.getWriter();
    //从浏览器客户端获取cookie
    Cookie[] cookies = req.getCookies();
    if(cookies !=null) {
        for (Cookie cookie : cookies) {
          //获取cookie的name
            String name = cookie.getName();
            if (name.equals("lastAccessTime")) {
              //获取cookie的value
                String value = cookie.getValue();
                Date date = new Date(Long.parseLong(value));
                writer.println("last access time is"+ date.toLocaleString());
            }
        }
    }else{
        writer.write("第一次访问本站");
    }
    //获取系统当前时间覆盖cookie的值
    resp.addCookie(new Cookie("lastAccessTime", System.currentTimeMillis()+""));

可以在浏览器中看到请求和响应中设置的cookie信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPWlS5gy-1627484323651)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210710230339471.png)]

在application中可以查看或删除cookie

在这里插入图片描述

  • 可以设置cookie的有效期即浏览器保存cookie的时间,过了设置的时间cookie会被删除
//设置cookie有效期时间(单位:秒)如果设置成0,表示删除这个cookie
cookie.setMaxAge(1*60);//设置成1分钟,1分钟后刷新页面,前面存的cookie会被删掉

在响应头中可以看到我们设置cookie的有效期

在这里插入图片描述

  • 删除cookie

    • 不设置有效期,关闭浏览器,就会删除cookie

    • 将有效期设置成0

      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          //设置要和删除的cookie的name一致(会覆盖原有的cookie)
          Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis() + "");
          //将有效期设置成0
          cookie.setMaxAge(0);
          resp.addCookie(cookie);
      }
      

session

  • 服务器会给每个用户(浏览器)创建一个session
  • 只要浏览器没关闭,这个session就一直存在,保存在服务器中
  • session可以存复杂的数据
  • 一旦注销session后,只要浏览器访问服务端又会生成新的session

**代码 **

1.获取session并设置属性

@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    //获取session
    HttpSession session = req.getSession();
    //判断是否是新创建的session
    if (session.isNew()) {
        writer.write("session create success ID is " + session.getId());
    } else {
        writer.write("session was exist ID is " + session.getId());
    }
    //session可以保存对象
    session.setAttribute("user", new User(1, "ld", 23));
    //
//        session.setMaxInactiveInterval(10*60);
}

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

User对象

public class User {
    private int id;

    private String name;

    private int age;

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2.再另一个Servlet中可以获取session和属性值

@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        //获取设置的属性值
        User user = (User) session.getAttribute("user");
        resp.setCharacterEncoding("utf-8");
        System.out.println(user);
    }

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

在这里插入图片描述

  1. 删除session(再次请求会重新创建一个session)(使用手动删除,设置自动删除(在web.xml进行配置))

    • 手动删除

      @WebServlet("/sessionDemo3")
      public class SessionDemo3 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              HttpSession session = req.getSession();
              //注销session
              session.removeAttribute("user");
              session.invalidate();
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
    • 设置自动删除(在web.xml进行配置)

        <session-config>
      <!--     配置session的默认生效时间,单位:分钟-->
      <!--    2分钟后session失效-->
            <session-timeout>2</session-timeout>
        </session-config>
      

session和cookie的区别

  1. cookie是服务器将用户数据(字符串键值对)发给浏览器由浏览器保存,浏览器可以保存多个cookie
  2. session是服务器将用户数据保存到由服务器创建的独立session中,由服务器保存。
  3. 因此经常使用的数据保存在session中

timeout>2

```

session和cookie的区别

  1. cookie是服务器将用户数据(字符串键值对)发给浏览器由浏览器保存,浏览器可以保存多个cookie
  2. session是服务器将用户数据保存到由服务器创建的独立session中,由服务器保存。
  3. 因此经常使用的数据保存在session中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值