springboot后端获取session,前端页面 session存取,退出登录时清空session中的数据,详情见项目 enroll-online-edu-sys(入学预约登记)

1、退出清空session

  @RequestMapping("/logout")
    public String logout(HttpServletRequest request, HttpSession session){
        Integer userid = (Integer)session.getAttribute("adminId");
        Object username = session.getAttribute("admin");
        if(StringUtils.isEmpty(userid) && StringUtils.isEmpty(username)){
            return "redirect:/login.html";
        }
        request.getSession().removeAttribute("adminId");
        request.getSession().removeAttribute("admin");
        request.getSession().getServletContext().removeAttribute("user_token");
        return "redirect:/login.html";
    }
引用:https://blog.csdn.net/weixin_43863007/article/details/88406486

2 、springboot后端获取 session 页面存取session

法一:
springBoot session存取
存:request.getServletContext().setAttribute(mobile,code);
取: String oldCode = (String) request.getServletContext().getAttribute("code");

前端页面 session存取
components.js 后端 token验证
frontcommon.js 前端 token验证
存: localStorage.setItem("token", r.token);
取:var studentId = localStorage.getItem('studentId');

页面跳转parent.location.href ='/sys/frontH5/myenroll.html';
function getAccountType(){
        let accountType = localStorage.getItem('accountType');
        vm.dataInfo.accountType=accountType;
        if(accountType==1){
            vm.isAdminShow=true;
        }if(accountType==0){
            vm.isSchAdminShow=true;
        }
        console.log("vm.dataInfo.accountType:"+vm.dataInfo.accountType+",vm.isAdminShow:"+vm.isAdminShow);
    }
    window.onload=getAccountType; //页面加载完自动加载

法二:后台写方法获取session值
后台设置session值
/**
	 * 获取session值
	 * @param session
	 * @return
	 */
	@AuthIgnore
	@RequestMapping("/sys/getSessionValue")
     public R getSessionValue(HttpSession session){
		 String status = (String) session.getAttribute("status");
		 return R.ok().put("sessionValue",status);
	 }
前端获取:
<script type="text/javascript">
	window.onload=getStatus; //页面加载完自动加载
	function getStatus(){
		$.ajax({
			data:null,
			type:"POST",
			dataType:'json',
			async:true,//同步
			url:"/sys/getSessionValue",
			success:function(data){
				if(data.sessionValue==null){
					console.log("数据为空!!!");
				}else{
					var status = data.sessionValue
					console.log("status:"+status);
					alert("status:"+status);
				}
			}
		});
	}
	
</script>
以下两种设置sesion 作用域和区别是什么:
        session.setAttribute("user", userTb);
		session.setAttribute("status", userTb.getStatus());

		request.getServletContext().setAttribute("user", userTb);
		request.getServletContext().setAttribute("status", userTb.getStatus());
这两种设置session作用域的方法有不同的作用和区别:

session.setAttribute("user", userTb);
这种方法是将用户信息对象(假设为userTb)存储在会话(session)对象中,键名为"user"。存储在session中的信息可以在同一个会话期间的不同请求之间共享。这意味着,只要会话未过期或被销毁,你可以在不同的页面或请求中通过获取session对象并提取"user"键来访问用户信息。
request.getServletContext().setAttribute("user", userTb);
这种方法是将用户信息对象(userTb)存储在ServletContext对象中,键名为"user"。ServletContext对象是在Web应用程序启动时创建的,并且在整个应用程序的生命周期中保持不变。存储在ServletContext中的信息可以在整个应用程序中的不同会话和请求之间共享。这意味着,不论是哪个会话,只要在同一个应用程序中,都可以通过获取ServletContext对象并提取"user"键来访问用户信息。
主要区别:

存储位置不同:session.setAttribute()方法将信息存储在会话对象中,而request.getServletContext().setAttribute()方法将信息存储在ServletContext对象中。
共享范围不同:存储在会话对象中的信息只能在同一个会话期间的不同请求之间共享,而存储在ServletContext对象中的信息可以在整个应用程序的不同会话和请求之间共享。
生命周期不同:会话对象的生命周期是与会话(session)相关联的,而ServletContext对象的生命周期是与Web应用程序的生命周期相关联的。
/**
	 * @description:
	 * 学生登录  loginType 0:密码登录 1:验证码登录
	 * @author: JACKPAN
	 * @date: 2023/7/19 11:22
	 * @param: [telephone, password, captcha, loginType, verifycode, request]
	 * @return: java.util.Map<java.lang.String,java.lang.Object>
	 **/
	@RequestMapping(value = "/sys/studentLogin", method = RequestMethod.POST)
	public Map<String, Object> studentLogin(
			@RequestParam(value = "telephone",required = false)  String telephone,
			@RequestParam(value = "password",required = false) String password,
			@RequestParam(value = "loginType",required = false) String loginType,
			@RequestParam(value = "verifycode",required = false) String verifycode, HttpServletRequest request) throws Exception {
		//用户信息
		Student student = studentService.studentLogin(telephone);
		//账号不存在、密码错误
		if (student == null ) {
			return R.error("账号或密码不正确");
		}
		//1、手机验证码登录
		if (!StringUtils.isEmpty(loginType)&&loginType.equals("1")){
			String codeInSession = (String) request.getServletContext().getAttribute("code");
			logger.info("=====================短信验证码==================="+codeInSession);
			if (verifycode.equals(codeInSession)){
				R r = R.ok().put("studentId",student.getStudentId());
				return r;
			}else {
				return R.error("验证码发送异常!");
			}
		}
		//2、密码登录
		//账号不存在、密码错误
		if (student == null || !student.getBackupField2().equals(MD5Util.MD5Encode(password))) {
			return R.error("账号或密码不正确");
		}
		//生成token
		String token = jwtUtils.generateToken(student.getStudentId().longValue());
		request.getServletContext().setAttribute("student", student);
		request.getServletContext().setAttribute("studentId", student.getStudentId());
		request.getServletContext().setAttribute("user_token",token);
		R r = R.ok().put("fronttoken", token).put("studentId",student.getStudentId()).put("stuName",student.getStuName());
		return r;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值