vuejs (前端项目) + spring mvc(后台项目),每次ajax请求都是新的session Id

最近学习使用vuejs 前后端分离原有的项目,使用vue-resource 实现ajax请求,后端项目设置了允许跨域访问,虽然实现了跨域异步请求,但是每次ajax请求的session都不一样,导致无正常获取登录信息?

搜索了很久,一般都是说怎么实现跨域请求,但是没有查到,怎么保证session一致的方法。

不知道怎么解决这个问题?

阅读 12.4k
4 个回答

问题解决了,解决方式如下:
1、参考ccfish的意见,安装了http-proxy-middleware插件,配置了如下内容:

devServer: {
    host: '127.0.0.1',
    port: 8010,
    proxyTable: {
      '/自定义内容/': {
        target: 'http://127.0.0.1:8080',
        changeOrigin: true       
      }
    }

结果报错:

Invalid configuration object. webpack-dev-server has been initialised using a configuration object that does not match
 - configuration has an unknown property 'proxyTable'. These properties are valid:

修改为:

devServer: {
    host: '127.0.0.1',
    port: 8010,
    proxy: {
      '/api/': {
        target: 'http://127.0.0.1:8080',
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/自定义内容'
        }
      }
    }

可以正常使用;
另外我把vue-resource 切换成了axios
配置如下:

import axios from 'axios';

axios.defaults.withCredentials=true;//让ajax携带cookie
Vue.prototype.$axios = axios;

后台项目拦截器中增加了,修改如下:

response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, accept, content-type, exception");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8010");//前段项目的域

Access-Control-Allow-Credentials 设为true的话,Access-Control-Allow-Origin就不能设为*了,只好改成具体的域了,这样就可以多次请求取到的session id就一致了。

最后非常感谢ccfish 、暗暗啊和工口会员!
ps:
原来使用的验证就是token,主要是项目小,要求也不高,不想用token了,

vuejs 开发模式下可以用proxyTable做NODE代理以避免浏览器跨域,生产环境下,可以通过NGINX等做代理为同一域名。。。

跨域应该是不能共享session的吧,因此每次都会生成一个sessionid.
建议采用token去认证。可选方案jwt、oauth等

多半是因为没有开启cookie共享,credential前后端都设置一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏