当前位置: 首页 > article >正文

HttpSession类的对象session:保存的数据谁有权限读取?

 结论:HttpSession类的对象session更像是独属于某一个用户的小型数据库,数据库的密码就是前端传回来的JSESSIONID的值

    public Result sendCode(String phone, HttpSession session) {
        //1.校验手机号
        if(RegexUtils.isPhoneInvalid(phone)){
            //2.如果不符合,返回错误信息
            return Result.fail("手机号格式错误!");
        }
        //3.生成验证码
        String code = RandomUtil.randomNumbers(6);//337718

        //4.保存验证码到session
        session.setAttribute("code",code);//337718

        //5.发送验证码
        log.debug("发送短信验证码成功,验证码:{}",code);

        //6.返回ok

        return Result.ok();
    }
public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session) {
        //1.校验手机号
        String phone = loginForm.getPhone();
        if(RegexUtils.isPhoneInvalid(phone)){
            //2.如果不符合,返回错误信息
            return Result.fail("手机号格式错误!");
        }

        //2.校验验证码
        Object cacheCode = session.getAttribute("code");//保存的337718
        String code = loginForm.getCode();//用户刚刚在http请求里体里上传的验证码

        //3.验证码不一致,报错

        //4.一致根据手机号查询用户

        //5.判断用户是否存在

        //6.不存在,创建新用户并保存

        //7.保存用户到session并返回结果

        return null;
    }

在sendCode()方法中保存验证码到session,我没看到session没有传递给login()方法,所以login()方法里的session.getAttribute("code")是怎么拿到保存的验证码的呢?

答:

由于 HttpSession 是基于会话的,同一个用户的多次请求会共享同一个 HttpSession 对象,因此 login()方法可以通过 session.getAttribute("code") 获取到之前保存的验证码。

具体来说,sendCode 和 login 方法都接收 HttpSession 作为参数,Spring 框架会自动将同一个用户的 HttpSession 对象传递给这两个方法。因此,login 方法可以通过 session.getAttribute("code") 获取到 sendCode 方法中保存的验证码。

Spring 框架是怎么识别各个请求是否为同一个用户?

用户在点击发送验证码按键的时候,前端会在请求头里请求服务器设置JSESSIONID

服务器的response Headers里就会返回set-cookie,前端自动保存这个JSESSIONID,之后每次请求都会在请求头里带上这个JSESSIONID,Spring 框架会自动将同一个JSESSIONID的请求视为同一个用户。

set-cookie:JSESSIONID=F3EAFF14FBC9A909286D915BD961630E; Path=/; HttpOnly


http://www.kler.cn/a/555467.html

相关文章:

  • 面试基础-如何设计一个短链接系统
  • 使用 Docker-compose 部署 MySQL
  • Openai Dashboard可视化微调大语言模型
  • C++游戏开发流程图
  • idea从远程gitee拉取项目
  • SVN服务器搭建【Linux】
  • Node os模块
  • Android开发-深入解析Android中的AIDL及其应用场景
  • SpringCloud系列教程:微服务的未来(二十四)Direct交换机、Topic交换机、声明队列交换机
  • 蓝桥杯备赛 Day15 动态规划
  • STM32 HAL库UART串口数据接收实验
  • Golang访问Google Sheet
  • Java 中的内存泄漏问题及解决方案
  • PDF 分割与合并 工具资源分享
  • 合规数助力律师专业工作,开启法律科技新篇
  • PassGPT:基于大型语言模型的密码建模和(引导式)生成
  • 火绒终端安全管理系统V2.0病毒防御功能介绍
  • 解决本地模拟IP的DHCP冲突问题
  • C++ 模板 简单易懂
  • c++ std::weak_ptr使用笔记