SpringBoot之前后端分离Session取值不正确

首先谈谈session和cookie的区别:

  1. session 在服务器端,cookie 在客户端(浏览器)

  2. session 默认被存在在服务器的一个文件里(不是内存)

  3. session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

  4. session 可以放在 文件、数据库、或内存中都可以。

 

在jsp中,当访问系统的时候,都会在cookie中存一个值。当每次发送请求的时候,都会携带这个sessionId,因为这个id值是相同的,所以可以保证这次回话中的session之后一个。

而前后端分离会导致你前后调用controller使用的Httpsession里面的sessionid不同,所以就会出现取不到值的问题(如下图sessionid)

SpringBoot之前后端分离Session取值不正确_第1张图片

SpringBoot之前后端分离Session取值不正确_第2张图片

解决办法:

解决全局跨域

@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.csdn.net/u013132244/article/details/82787891 

小白一枚,在这里有什么错误的希望大家指出来,大家一起讨论,这个主要是用来我自己怕忘记,也算是自己的学习经历吧,第一次发,请大家多多指教。

 

 

你可能感兴趣的:(SpringBoot之前后端分离Session取值不正确)