跨域ajax请求无法带上目标域已存在的cookie?

下面是旧问题作废,之所以不删除是想说明一下问这个问题的前提原因。

**目前情况是前后端分离,且后端API和前端不在同一个域的情况下,如果浏览器不手动访问一次后端,那么每次前端发起的ajax请求都会导致后端重新向后端API所在域设置一个新的cookie,导致session无法正常使用

请问一下现在做身份验证的话,除了像传统app一样在登录的时候发送一个access_token并存储在前端的状态管理器(比如说redux,vuex),然后后续每次请求带上这个access_token以外,就没有其他办法能够使用session做身份验证了吗?(希望大家能够给一个优雅的最佳实践)**

图片描述
图片描述

问题好像发现了:如图所示,我本地明明已经有一个laravel_session的cookie,但是每次请求,还是重新给我set了一个cookie,说明axios发起跨域请求的时候,没有带上目标域下已经存在的cookie,现在感觉问题应该是出在axios把



下面是旧问题作废:

图片描述

15行将cw这个session存储,但是在34行访问结果只有一个

array (size=1)
  '_token' => string 'VXgVeooqOLPi5XYHYFZY0m1pDaqCySKzuYVe34EW' (length=40)

这是为什么?

我是Laravel5.3版本,已经正确按照https://segmentfault.com/q/10...方法试过了(路由增加web中间件),均无效

阅读 4.6k
2 个回答

找到方法了http://m.blog.csdn.net/articl...

使用withCredentials发送跨域请求凭据

默认情况下,标准的跨域请求是不会发送cookie等用户认证凭据的,XMLHttpRequest
2的一个重要改进就是提供了对授信请求访问的支持。
本地模拟www.zawaliang.com向www.xxx.com发送带cookie的认证请求,我们需求做以下几步工作:
默认情况下widthCredentials为false,我们需要设置widthCredentials为true: var xhr = new
XMLHttpRequest(); xhr.open('GET', 'http://www.xxx.com/api');
xhr.withCredentials = true; xhr.onload = onLoadHandler; xhr.send();
请求头,注意此时已经带上了cookie: GET http://www.xxx.com/api HTTP/1.1 Host:
www.xxx.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:18.0)
Gecko/20100101 Firefox/18.0 Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate DNT: 1
Referer: http://www.zawaliang.com/inde... Origin:
http://www.zawaliang.com Connection: keep-alive Cookie: guid=1
设置服务端响应头: Access-Control-Allow-Credentials: true
如果服务端不设置响应头,响应会被忽略不可用;同时,服务端需指定一个域名(Access-Control-Allow-Origin:www.zawaliang.com),而不能使用泛型(Access-Control-Allow-Origin:
*) 响应头: HTTP/1.1 200 OK Date: Wed, 06 Feb 2013 03:33:50 GMT Server: Apache/2 X-Powered-By: PHP/5.2.6-1+lenny16
Access-Control-Allow-Origin: http://www.zawaliang.com
Access-Control-Allow-Credentials: true Set-Cookie: guid=2;
expires=Thu, 07-Feb-2013 03:33:50 GMT Content-Length: 38 Content-Type:
text/plain; charset=UTF-8 X-Cache-Lookup: MISS from proxy:8080
有一点需要注意,设置了widthCredentials为true的请求中会包含远程域的所有cookie,但这些cookie仍然遵循同源策略,所以你是访问不了这些cookie的。

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