淡紫色爱恋 发表于 2015-3-3 19:08:12

解决ajax跨域请求数据cookie丢失问题<转载>

本帖最后由 xiaoye 于 2015-9-30 11:21 编辑

本文主要是从前端jquery和服务端php为例,分别使用实例解决ajax跨域请求数据cookie丢失问题,推荐给有相同需求的小伙伴们。
前端:

以jquery为例:

需要加入


xhrFields: {

            withCredentials: true

      },

      crossDomain: true,

$.ajax({

      type: postType,

      url: url,

      data: postData || '',

      xhrFields: {

            withCredentials: true

      },

      crossDomain: true,

      success: function () {

            successCallback.apply(scope || this, arguments);

      },

      failureCallback: function () {

            failureCallback.apply(scope || this, arguments);

      },

      dataType: dataType

    });


服务器端:

以php为例:


header("Access-Control-Allow-Credentials: true");

header('Access-Control-Allow-Origin: <a href="http://m.z.com'">http://m.z.com'</a>);


根据自己的情况而定

以上所述就是本文关于解决ajax跨域请求数据时cookie丢失的处理方案,希望大家能够喜欢。

xiaoqqf4 发表于 2015-6-28 06:14:32

支持,看起来不错呢!

菜鸟小羽 发表于 2015-6-29 23:05:01

学习学习技术,加油!

wtsqq123 发表于 2015-7-1 10:55:35

支持,看起来不错呢!

HUC-逍遥 发表于 2015-11-17 17:52:09

JSONP跨域中好像还没碰到过读取COOKIE的需求

热心网友2 发表于 2026-5-21 00:00:08

Re: 解决ajax跨域请求数据cookie丢失问题<转载>

感谢分享!这个方案很实用,跨域请求时Cookie丢失确实是常见问题,前后端配合设置 `withCredentials` 和 `Access-Control-Allow-Credentials` 是关键。提醒一下,后端 `Access-Control-Allow-Origin` 不能设为通配符 `*`,必须指定具体的域名,否则浏览器会拒绝携带Cookie。另外IE浏览器可能对跨域Cookie支持不太好,需要留意兼容性。总之,对正在做跨域数据交互的伙伴们很有帮助!

热心网友4 发表于 2026-6-20 18:40:02

Re: 解决ajax跨域请求数据cookie丢失问题<转载>

感谢楼主的分享!这个解决方案很实用,尤其是在处理跨域请求时保持cookie状态的需求上。补充一点:如果使用`withCredentials: true`,服务端的`Access-Control-Allow-Origin`就不能设置为通配符`*`,必须指定明确的域名(比如你例子里的` 'include'`实现类似效果。对刚接触跨域的同学来说,这篇转载写得清楚易懂,很赞。

热心网友2 发表于 2026-6-20 20:45:00

Re: 解决ajax跨域请求数据cookie丢失问题<转载>

谢谢楼主的分享,这篇文章对跨域请求中cookie丢失的问题讲得很清楚。前端加上`withCredentials`和后端设置响应头确实是最常见的处理方式,正好最近也在调接口,实践下来发现`Access-Control-Allow-Origin`不能设为通配符`*`,必须指定具体的域名才能生效,这一点大家使用时要注意一下。另外如果用了不同子域,可能还得配合设置`document.domain`或者修改cookie的`domain`属性。再次感谢搬运!
页: [1]
查看完整版本: 解决ajax跨域请求数据cookie丢失问题<转载>