-
资料查阅:
- 1, jquery使用CORS跨域请求时,为什么cookie丢失了。
- 2, 前后端分离了是不是服务器就不能设置Cookie了?
- 3, 前后端分离 不用session怎么才能实现身份验证?
- 5, XMLHttpRequest.withCredentials
- 6, 跨域请求设置withCredentials
- 7, XMLHttpRequest
- 8, 浏览器跨域方法与基于Fetch的Web请求最佳实践
- 9, 发送跨域请求返回405错误问题
- 10, cors跨域之简单请求与预检请求(发送请求头带令牌token)
- 11, 关于跨域的ajax
- 12, 设置header,实现跨域访问
- 13, 记一次header跨域与cookie共享
目前借鉴的方法:前端把account和password,提交到服务端的登录api,服务端验证正确后,生成一个token,并把token和userId,存在缓存里(推荐redis数据库),然后把token返回给前端。前端每次的请求头中带token,这样就是简单的token 机制
作者:文杰
链接:https://www.zhihu.com/question/36724306/answer/119983931
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考以上这么多,实际遇到的问题即是与 记一次header跨域与cookie共享 相同。
跨域请求API前提:
Web服务器端:如果要用ajax传cookie必须设置下面代码,否则web服务器无法传递cookie给api服务器。
$.ajaxSetup( { crossDomain: true, xhrFields: { withCredentials: true } });
API服务器端Response.Headers必须设置 Access-Control-Allow-Origin,允许源为(Origin)Web服务器的请求。如此服务器才能接收web服务器发送过来的cookie。
Access-Control-Allow-Origin http://web.abc.com;// web服务器网址。即是请求是的Origin。
以上第1步实现web主机发送cookie 到 api主机,第2步实现API主机接收web主机。之后api主机要回传cookie给web主机,API值必须设置:
Access-Control-Allow-Credentials true
4,API主机可以设置CookieDomain,指定只接受哪个域名的主机。如下设置,如此Web主机:web.abc.com,API主机:api.abc.com 之间就可以互通cookie了。
CookieDomain默认是web主机的域名,如果web主机和API主机域名不相同,就不能互传cookie了,要想其他办法。<add key="CookieDomain" value="abc.com" />