首先谈谈session和cookie的区别:
-
session 在服务器端,cookie 在客户端(浏览器)
-
session 默认被存在在服务器的一个文件里(不是内存)
-
session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
-
session 可以放在 文件、数据库、或内存中都可以。
在jsp中,当访问系统的时候,都会在cookie中存一个值。当每次发送请求的时候,都会携带这个sessionId,因为这个id值是相同的,所以可以保证这次回话中的session之后一个。
而前后端分离会导致你前后调用controller使用的Httpsession里面的sessionid不同,所以就会出现取不到值的问题(如下图sessionid)
解决办法:
解决全局跨域
@Configuration
public class WebCrossOrigin {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}
(1)后端:在每个controller上面添加
@CrossOrigin(allowCredentials ="true")//设置是否允许客户端发送cookie信息。默认是false
(2)前台:
//vue需要再main.js的import下增加以下代码
axios.defaults.withCredentials = true
//jquery需要再每次使用ajax时增加如下配置
xhrFields:{
withCredentials:true
}
//angulars
var utils = angular.module('Utils', []);
utils.config(['$httpProvider', config]);
function config($httpProvider) {
$httpProvider.defaults.withCredentials = true; //关键代码
}
参考:https://blog.youkuaiyun.com/u013132244/article/details/82787891
小白一枚,在这里有什么错误的希望大家指出来,大家一起讨论,这个主要是用来我自己怕忘记,也算是自己的学习经历吧,第一次发,请大家多多指教。