Ajax携带cookie解决方案
(2018-09-13 10:56:55)
标签:
ajax携带cookie |
分类: java |
场景:
server {
listen
80;
server_name
at.ving.com;
location /a/
{
proxy_pass
http://127.0.0.1:8020/;
----》 at.ving.com/a 指向
http://127.0.0.1:8020/(前端)
proxy_redirect default ;
#root
html;
#index index.html
index.htm;
}
proxy_pass
http://127.0.0.1:10010/; ---》 at.ving.com/a
指向 http://127.0.0.1:10010/(接口)
proxy_redirect default ;
#root
html;
#index index.html
index.htm;
}
error_page
500 502 503 504
/50x.html;
location = /50x.html {
root
html;
}
}
url:
"http://10.100.99.165:10010/answerQuestion/getExtendKey", //
加随机数防止缓存
type: "get",
crossDomain:
true,
xhrFields: {
withCredentials: true
},
success: function (data) {
;
},
error: function (r) {
console.log(JSON.stringify(r));
}
});
后台需要前端的ajax请求携带上cookie值,因为cookie上面有用户的userId的加密信息。
解决步骤:
1、服务器方面,添加@CrossOrigin注解到controller层上。-----》解决服务端允许前端跨域问题。
2、前端方面:必须要注意的点是:浏览器的同源策略问题----》就是域名必须要一致,否则,ajax是不会携带非同源的cookie的。-----》怎样解决这个同源的问题呢?-----》如果前端同事懂的话,可以用node.js去配置代理---》如果是后台同事懂的话,可以用nginx去配置反向代理------》目的是:让域名保持一致!!!!!
下面是ngix的核心配置例子:
------------------------------------------------------------------------------------
location /b/ {
------------------------------------------------------------------------------------
这样操作之后,域名就保持一致,cookie值就是同源,则发ajax的时候就是携带上cookie
下一问题就是:
浏览器上的cookie谁来写的问题:
方案一:前端代码来强制设置cookie值-------》踩过这个坑,如果前端同事不熟练的情况下,是比较难调通,因为要教会他。
方案二:让后台去写cookie到浏览器上。这个操作,在登录的时候,往往都会向浏览器上写上cookie。这样的操作,相对方案一的操作,比较灵活,可以切换不同的用户。建议使用此方式。
最后一步就是让ajax允许携带cookie
$.ajax({