// `timeout` specifies the number of milliseconds before the request times out. // If the request takes longer than `timeout`, the request will be aborted. timeout: 1000, // `withCredentials` indicates whether or not cross-site Access-Control requests // should be made using credentials withCredentials: false, // default // `adapter` allows custom handling of requests which makes testing easier. // Return a promise and supply a valid response (see lib/adapters/README.md). adapter: function (config) { /* ... */ },
withCredentials默认是false,意思就是不携带cookie信息,那就让它为true,我是全局性配置的,就是main.js中的这句话:
axios.defaults.withCredentials=true;
然后再测试,发现每次ajax请求都是同样的session了(不包含浏览器的options请求)。
3、代理配置
因为不想每个页面里的请求都写:8080,并且我用的是element ui的webpack项目模板,所以就想使用代理(不知道叫这个合适不合适):
devServer: { host: '127.0.0.1', port: 8010, proxy: { '/api/': { target: 'http://127.0.0.1:8080', changeOrigin: true, pathRewrite:{ '/api':'/xxxxxx' } } }
把ajax请求改成下面这个样子:
this.$axios.post('/api/xx/xxx', {}, { headers: { "Content-Type": "application/json;charset=utf-8" } }).then(function(response) { // 这里是处理正确的回调 }).catch(function(response) { // 这里是处理错误的回调 console.log(response) });
网上说都是配置为proxyTable, 用的是http-proxy-middleware这个插件,我装上插件,改成这个,webpack总是报错,说proxyTable是非法的配置,无法识别。
无奈改成了模板自带的proxy,可以使用,为什么可以用,我还不请求,proxyTabel为什么不能用,也没搞明白。有知道的,可以指点一下。
虽然代理配置好了,也能正常请求,结果发现请求的session又不一样了,感觉心好累啊!!!
没办法,只能再看请求头是不是有问题,发现返回header中有session限制的,如下:
复制代码 代码如下:
set-cookie:JSESSIONID=node0v5dmueoc119rb42b59k5qf3w0.node0;Path=https://www.jb51.net/xxxx
要求cookie只能再/xxxx下也就是项目的根路径下使用,于是我把代理改成:
devServer: { host: '127.0.0.1', port: 8010, proxy: { '/xxxx/': { target: 'http://127.0.0.1:8080', changeOrigin: true } }
session又恢复正常了,可以用了;不知道为什么配成api映射的形式为什么不能用。
这就是解决这个跨域session问题的过程,希望对大家有点帮助!也希望大家多多支持脚本之家。
您可能感兴趣的文章: