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)

解决办法:

解决全局跨域

@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 

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

 

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值