Cookie、Session

建项目选择maven->webapp,然后标记src->main->java&resources,将web.xml换成最新版,在pom.xml中添加依赖

1. 会话

会话:用户打开一个浏览器,点击了很多连接,访问多个web资源,关闭浏览器,这个过程为会话。
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,之前来过。
一个网站怎么证明你来过?
客户端      服务端

  • 服务端给客户端一个cookie(信件),客户端下次访问服务端带上 信件 就可以了;cookie
  • 服务器登记你来过了,下次你来的时候我来匹配你;session

2. 保存会话的两种技术

  • cookie:客户端技术(响应,请求)
  • session:服务器技术,利用整个技术,可以保存用户的会话信息?我们可以把信息或者数据放在session中!
  • 保存用户上一次访问的时间demo
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        req.setCharacterEncoding("utf-8");
        //resp.setCharacterEncoding("utf-8");
        //响应输出,out是jsp的内置对象
        PrintWriter out = resp.getWriter();
        //服务器从客户端得到信件
        Cookie[] cookies = req.getCookies();
        //判断cookie是否存在
        if (cookies!=null){
            out.write("你上一次访问的时间是:");
           // cookies.for快捷键
            for (Cookie cookie:cookies) {
                //获取cookie的名字
                if ("lastLoginTime".equals(cookie.getName())) {
                    //有key就有value
                    long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    out.write(date.toLocaleString());
                }
            }
        }else{
            out.write("这是第一次访问");

        }
        //服务器给客户端相应一个cookie
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        //cookie有效期为1天
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
  • 一个网站的cookie是否存储上限
    • 一个Cookie只能保存一个信息
    • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
    • cookie大小有限制4kb
    • 上限大概为300个(浏览器上限)
  • 删除cookie
    • 不设置有效期,关闭浏览器,自动失效;
    • 设置有效期时间为0
      图片无法正常加载,请联系本文作者

3. Session

  • 服务器会给每一个用户(浏览器)创建一个session对象;
  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
  • 用户登录之后,整个网站它都可以访问!–>保存用户的信息,保存购物车的信息…
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到session
        HttpSession session = req.getSession();
        //给session中存东西
        session.setAttribute("name",new Person("violet",18));
        //获取sessionid
        String sessionId = session.getId();
        //判断id是否存在
        if (session.isNew()){
            resp.getWriter().write("session创建成功,id:"+sessionId);
        }else{
            resp.getWriter().write("session已经存在,id:"+sessionId);
        }
        //session创建的时候,do
//        Cookie cookie = new Cookie("JSESSIONID", "sessionId");
//        resp.addCookie(cookie);
   @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();
        //取session中存的东西
        Person person = (Person) session.getAttribute("name");
        System.out.println(person.toString());

    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        //注销session
        session.removeAttribute("name");
        session.invalidate();

    }

会话自动过期
  在web.xml中进行一下配置

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

Session和Cookie的区别

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以多个)
  • Session把用户的数据写给用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
  • Session对象由服务器创建

图片无法正常加载,请联系本文作者

posted @ 2022-11-29 17:15  gyViolet  阅读(13)  评论(0编辑  收藏  举报