首页 > 其他分享 >session概念和底层原理——生命周期

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

时间:2024-08-16 18:52:07浏览次数:8  
标签:生命周期 name request 60 session cookie addCookie 底层

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:由于存放在服务器中。用户无法直接访问获取数据,所以通常存放需要被保护的用户状态信息。
    

标签:生命周期,name,request,60,session,cookie,addCookie,底层
From: https://blog.csdn.net/a3263298665/article/details/141141557

相关文章

  • jsp底层运行原理分析
    jsp一、jsp的概念JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。更直观的就是html代码可以与java代码同时存在一个页面中。二、jsp的九大内置对象resquest——请求域对象request对象是javax.servlet.httpServletRequest类型的对象。......
  • ArkTs基础语法-声明式UI-页面和自定义组件生命周期
    页面和自定义组件生命周期组件和页面的关系生命周期页面生命周期组件生命周期普通流程为:其他流程:自定义组件的创建和渲染流程首次创建重新渲染自定义组件的删除自定义组件监听页面生命周期组件和页面的关系自定义组件:@Component装饰的UI单元,可以组合多个系统组件......
  • vue-router,vue3介绍,vue3快速创建项目,常用api,生命周期,setup的特殊写法
    Ⅰvue-router【一】路由守卫#1路由守卫是什么 是否登录,登录后才能访问,没登录重定向到login作用:对路由进行权限控制#2全局守卫、独享守卫、组件内守卫使用importElementfrom'element-ui'//全局路由守卫-->前置路由守卫router.beforeEach((to,fr......
  • 广告的底层逻辑:从认知心理学看品牌偏好与消费者行为
    在当今信息爆炸的时代,广告无处不在,深入影响着我们的消费选择。那么,广告的本质是什么?为何我们要做广告?本文将深入探讨广告的底层逻辑,并结合认知心理学进行解析。一、广告的本质广告的本质是传播和转化。它是品牌与消费者之间的桥梁,旨在传递信息、激发兴趣、建立信任,最终促成......
  • [Java并发]Synchronized底层原理
    synchronized底层语义原理Java虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现。在Java语言中,同步用的最多的地方可能是被synchronized修饰的同步方法。同步方法并不是由monitorenter和monitorexit指令来实现同步的,而是由方法调用指令读取运行时......
  • Spring Boot中的Bean生命周期管理
    SpringBoot中的Bean生命周期管理大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Spring框架中,Bean的生命周期管理是一个非常重要的概念。了解和掌握Bean的生命周期可以帮助开发者更好地控制Bean的创建、初始化、使用和销毁过程。Bean的生命周期概......
  • Jetpack Compose学习(13)——Compose生命周期及副作用函数
    原文:JetpackCompose学习(13)——Compose生命周期及副作用函数-Stars-One的杂货小窝此文建议需要了解kotlin的lambda表达式使用和协程基础使用,不然可能会有些阅读困难本篇算是参考他人文章,按照自己理解重新总结了下吧,偏理论生命周期Composable组件都是函数,Composable......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务阶段4】任务阶段1、2、3链接一、实现任务阶段1-编写自己Spring容器,实现扫描包,得到bean的class对象二、实现任务阶段2-扫描将bean信息封装到BeanDefinition对象,并......
  • 【安卓】Service生命周期与前台活动
    文章目录Service生命周期使用前台Service前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。Service生命周期  在项目的任何位置调用了Context的startService()方法,相应的Service就会启动,并回调onStartCommand(......
  • Web开发:C# MVC + Session机制实现授权免登录demo
    token基础demo【需求】Home/Index登录界面,校验成功后可以登录到Main/Index,用户登录3分钟内关闭网站,再次访问Home/Index时可以免密登录Main/Index【配置文件-Program.cs】varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.buil......