session概念和底层原理——生命周期

session–(会话)

一、概念

session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。

二、使用和注意事项

  1. session是以键值对的形式存放数据,类型为**<String,Object>**,通过getAttribute()和setAttribute()分别取数据和存数据。

  2. session的创建是在需要使用到session对象时,通过request.getSession()获取当前session对象。

  3. 不同的客户端发送请求,如果要使用session对象,那么服务器会分别创建对应客户端的session对象。 如下图:![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]

  4. 在这里插入图片描述

使用案例:

  • 登录成功:
if(user!=null){//登录成功
                HttpSession session = request.getSession();
                session.setAttribute("username",user.getUsername());
                response.addCookie(CookieUtils.addCookie("username", user.getUsername(), 60 * 60 * 24 * 3));
                session.setAttribute("name",user.getName());
                response.addCookie(CookieUtils.addCookie("name", user.getName(), 60 * 60 * 24 * 3));
                session.setAttribute("role",role);
                response.addCookie(CookieUtils.addCookie("role", role, 60 * 60 * 24 * 3));
                request.getRequestDispatcher("index.jsp").forward(request,response);
            }else {//登录失败
                HttpSession session = request.getSession();
                session.setAttribute("msg","用户名或密码错误!");
                request.getRequestDispatcher("login.jsp").forward(request,response);
            }

当用户名和密码通过验证时,创建session对象,将username、name、role存放到session的对应key中;如果没成功则存放错误信息msg。

Cookie

一、概念

    HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态。Cookie 使基于[无状态](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview#http_%E6%98%AF%E6%97%A0%E7%8A%B6%E6%80%81%EF%BC%8C%E6%9C%89%E4%BC%9A%E8%AF%9D%E7%9A%84)的 HTTP 协议记录稳定的状态信息成为了可能。   

二、Cookie的使用及注意事项

  • 服务端可以创建cookie对象,通过setMaxAge()设置过期时间,通过addCookie()在响应中返回该cookie对象。

    注意:过期时间time:正数的单位时秒,意味这它将会在未来的多少秒后过期。0代表立即过期。负数浏览器一关,默认自动删除。

  • 客户端再次发送请求时,会携带该cookie到请求体中,服务器可以验证其中的信息,方便操作相关的功能。

三、使用案例:

    if(user!=null){//登录成功
                    HttpSession session = request.getSession();
                    session.setAttribute("username",user.getUsername());
                    response.addCookie(CookieUtils.addCookie("username", user.getUsername(), 60 * 60 * 24 * 3));
                    session.setAttribute("name",user.getName());
                    response.addCookie(CookieUtils.addCookie("name", user.getName(), 60 * 60 * 24 * 3));
                    session.setAttribute("role",role);
                    response.addCookie(CookieUtils.addCookie("role", role, 60 * 60 * 24 * 3));
                    request.getRequestDispatcher("index.jsp").forward(request,response);
                }else {//登录失败
                    HttpSession session = request.getSession();
                    session.setAttribute("msg","用户名或密码错误!");
                    request.getRequestDispatcher("login.jsp").forward(request,response);
                }

当用户登录成功后,添加username,name,role到cookie中,通过响应返回给客户端。

<%
        int count = 0;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null) {
            for (Cookie cookie : cookies) {
                String name = URLDecoder.decode(cookie.getName(), "UTF-8");
                if ("username".equals(name)) {
                    count++;
                }
                if ("name".equals(name)) {
                    count++;
                }
                if ("role".equals(name)) {
                    count++;
                }
            }
        }

        String msg = (String) session.getAttribute("msg");
    %>
    <%if(count==3){
    request.getRequestDispatcher("index.jsp").forward(request,response);
    %>

前端通过判断cookie里的字段,验证通过就直接跳转到首页。

Session与Cookie的联系和区别

一、联系:

在这里插入图片描述

第一次请求时,如果服务器使用了session对象,那么在响应中会将JSESSIONID存入cookie,当第二次请求时,请求体会携带该cookie中的JSESSIONID到服务器。

二、区别

  • 存放地址不同

    cookie:存放在用户的浏览器中,每次请求时会发送给服务器。
    
    session:存放在服务器中,第一次使用的时候才会被创建。而且一个用户会有一个唯一的session对象(Session ID)。
    
  • 生命周期不同

    cookie:可以设置过期时间,过期后会被自动删除。Cookie 的生命周期可以是会话级(浏览器关闭后删除)或持久级(设置过期时间)。

    session:通常在用户关闭浏览器后失效,或者在服务器上达到一定的超时时间后失效。Session 的生命周期通常较短。

  • 存储内容的区别

      cookie:因为它存放在浏览器中,对于用户来说是透明的,通会对信息加密。主要存放一些用户偏好的信息,少量、非敏感的信息。
    
      session:由于存放在服务器中。用户无法直接访问获取数据,所以通常存放需要被保护的用户状态信息。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值