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;
}