因为前后端分离的开发和以前普通的jsp开发有所区别,前端使用的是html页面,而后台只提供了ajax访问的数据接口,所以一直对后台session中的值什么时候过期感兴趣。今天关于session中的值在什么时候才会过期做了一个实验。
我在后台提供了2个接口
@GetMapping("/getSessionValue")
@ResponseBody
public void d1(HttpSession session) {
// 打印session中的值
System.out.println(session.getAttribute("user"));
}
@GetMapping("/setSessionValue")
@ResponseBody
public void d2(HttpSession session) {
// 向session中存储数据
session.setAttribute("user", "dagger");
}
最后发现如果html页面和java项目是在同一个ip和端口下运行的,那么session中的值是在关闭浏览器后才销毁的。
如果,html页面和java项目不是在同一个端口下运行的,那么每一次ajax请求都只代表一次连接,即下次同样的html页面再次请求后台的接口时,session都不是同一个了。可以采用redis来存储session的方式。
在ajax自定义参数如:
$.ajax({
url:url,
// 加上这个参数就可以了,允许跨域访问携带cookie
xhrFields: {
withCredentials: true
},
crossDomain: true,
success:function() {
},
error:function() {
}
});