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

发布于:2025-02-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

 结论: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


网站公告

今日签到

点亮在社区的每一天
去签到