03-cookie、session

cookie、session

会话

会话:用户打开浏览器,点了很多超链接,访问多个web资源,关闭浏览器这个过程称之为会话

有状态会话:一个同学来过教室,下次再来教室,我们知道他曾经来过。

保存会话的两种技术

cookie

客户端技术(响应,请求)

session

服务器技术,利用这个技术可以保存用户的会话信息,我们可以把信息或数据保存到session中。

cookie

在这里插入图片描述

  1. 从请求中拿到cookie信息
  2. 服务器响应给客户端cookie

在这里插入图片描述

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        Cookie[] cookies = req.getCookies();
        int flag=-1;
        for (int i = 0; i < cookies.length; i++) {
    
    
            if (cookies[i].getName().equals("loginTime")){
    
    
                flag=i;
                break;
            }
        }
        if (flag!=-1){
    
    
            long loginTime = Long.parseLong(cookies[flag].getValue());
            Date date = new Date(loginTime);
            System.out.println(date.toLocaleString());
        }else {
    
    
            System.out.println("欢迎您首次到来!");
        }
        //每次登录网站都会更新时间
        Cookie loginTime = new Cookie("loginTime", System.currentTimeMillis() + "");
        //给cookie设置一个有效期
        loginTime.setMaxAge(24*60*60);
        resp.addCookie(loginTime);
    }

cookie存在上限

  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
  • cookie站点有限制大小为4kb
  • 浏览器上限300个cookie

删除cookie

不设置有效期,关闭浏览器,自动失效

设置有效期为0

编码解码

URLEncoder.encode("中文","utf-8");
URLDecoder.decode(cookies[0].getValue(),"utf-8");

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();
        //得到sessionId
        String id = session.getId();
        //在session中存储属性
        session.setAttribute("name","小黑子");
        if (session.isNew()){
    
    
            resp.getWriter().write(id+"创建成功!");
        }else{
    
    
            resp.getWriter().write(session.getAttribute("name")+"属性设置成功!");
        }
        //手动注销session
        session.invalidate();
    }

设置session有效日期

<session-config>
<!--        以分钟为单位-->
     <session-timeout>15</session-timeout>
 </session-config>

session和cookie的区别

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

猜你喜欢

转载自blog.csdn.net/qq_52117201/article/details/129401159