使用HttpServiceRequest设置session
使用HttpServiceRequest获取session
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/test")
public class SpringBootTest {
//设置session
@RequestMapping("/test1")
public String test1(HttpServletRequest request){
request.getSession().setAttribute("sessionName","sessionValue" );
return "设置session成功";
}
@RequestMapping("/test2")
//获取session
public String test2(HttpServletRequest request){
HttpSession httpSession=request.getSession();
//获取到的是object类型,强制转换为string类型
String sessionName= (String) httpSession.getAttribute("sessionName");
return "获取session成功:"+sessionName;
}
}
先设置session:请求 http://127.0.0.1:8080/test/test1
后获取session:请求 http://127.0.0.1:8080/test/test2
使用HttpServiceRequest设置session
使用HttpSession获取session
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/test")
public class SpringBootTest {
//设置session
@RequestMapping("/test1")
public String test1(HttpServletRequest request){
request.getSession().setAttribute("sessionName","sessionValue" );
return "设置session成功";
}
@RequestMapping("/test2")
//获取session
public String test2(HttpSession httpSession){
/**
* 获取到的是object类型,强制转换为string类型
* 以设置session时的key获取,获取到的是value
*/
String sessionName= (String)httpSession.getAttribute("sessionName");
return "获取session成功:"+sessionName;
}
}
请求顺序、请求链接、请求结果与上面例子相同
设置session的有效时间,用HttpServiceRequest参数
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/test")
public class SpringBootTest {
//设置session
@RequestMapping("/test1")
public String test1(HttpServletRequest request){
HttpSession httpSession=request.getSession();
httpSession.setAttribute("sessionName","sessionValue");
//设置session的有效时间为10秒,这里的单位是秒
httpSession.setMaxInactiveInterval(10);
return "设置session成功,session的有效时间为10秒";
}
@RequestMapping("/test2")
//获取session
public String test2(HttpSession httpSession){
/**
* 获取到的是object类型,强制转换为string类型
* 以设置session时的key获取,获取到的是value
*/
String sessionName= (String)httpSession.getAttribute("sessionName");
return "获取session成功:"+sessionName;
}
}
设置的10秒是距离最后一次活动10秒后session失效
先设置session:请求 http://127.0.0.1:8080/test/test1 设置session成功,10秒后获取session 请求http://127.0.0.1:8080/test/test2 获取不到session如下图
先设置session:请求 http://127.0.0.1:8080/test/test1 设置session成功,10秒内获取session 请求http://127.0.0.1:8080/test/test2 获取session成功,距离获取session请求10秒之后再获取session 请求http://127.0.0.1:8080/test/test2 获取session失败
设置session失效,在获取方法中设置session失效,用HttpSession设置,前提条件是设置session是用httprequest设置的session才能用这个方法设置失效,也是有两种设置失效的办法
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/test")
public class SpringBootTest {
//设置session
@RequestMapping("/test1")
public String test1(HttpServletRequest request){
HttpSession httpSession=request.getSession();
httpSession.setAttribute("sessionName","sessionValue");
return "设置session成功";
}
//第一种设置失效,用httpSession.invalidate();设置失效
@RequestMapping("/test2")
//获取session
public String test2(HttpSession httpSession){
/**设置session失效,
* 设置失效要在获取session之前设置,
* 这样才能获取不到session
* 才能设置成功
*/
httpSession.invalidate();
String sessionName= (String)httpSession.getAttribute("sessionName");
return "获取session成功:"+sessionName;
}
//第二种设置失效,用request.getSession().invalidate();设置失效
@RequestMapping("loginOut")
public String loginOut(HttpServletRequest request){
request.getSession().invalidate();
return "/login/loginPage";
}
}
先设置session 请求http://127.0.0.1:8080/test/test1 设置session成功
后获取session 请求http://127.0.0.1:8080/test/test2 获取session失败
Session already invalidated:会话已失效
不设置session有效期的情况下SpringBoot默认session的有效时间是30*60(30分钟)
设置全局的session时间
在资源文件resource下的application.properties文件中设置
service.session.timeout=60 单位是秒
注解设置session
1 在设置session的类上加一个注解@SessionAttributes;加在@RestController注解的下面一行
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpSession;
@Controller
//使用注解设置session,value里的名称要与ModelAndView里的key一致
@SessionAttributes(value = {"name","value"})
@RequestMapping("/test")
public class SpringBootTest {
//设置session
@RequestMapping("/test1")
public ModelAndView test1(){
ModelAndView modelAndView=new ModelAndView();
//freemarker模板文件获取session值时用设置的key获取
modelAndView.setViewName("/my/myindex");
modelAndView.addObject("name","sessionID" );
modelAndView.addObject("value","sessionValue" );
return modelAndView;
}
@RequestMapping("/test2")
//获取session
public @ResponseBody String test2(HttpSession httpSession){
String sessionID= (String)httpSession.getAttribute("name");
String sessionValue=(String)httpSession.getAttribute("value");
return "sessionID:"+sessionID+"\r\nsession值:"+sessionValue;
}
}
freemarker模板文件/my/myindex.ftl中写el表达式将key对应的value显示在前端浏览器
${name!}
${value!}
用注解设置了session,设置session失效也就要用跟注解对应的方式,这种方式只适用于session是用注解设置的,才能这样取消session,用SessionStatus的setComplete方法
@RequestMapping("loginOut")
public void loginOut(SessionStatus status){
status.setComplete();
}