当前位置:Gxlcms > PHP教程 > javascript-为何二级域名下cookie可以获取,却不能使用ajax自动发回,cookie不能跨域?

javascript-为何二级域名下cookie可以获取,却不能使用ajax自动发回,cookie不能跨域?

时间:2021-07-01 10:21:17 帮助过:8人阅读

情景复现流程:

  1. <code>机器A局域网地址:192.168.9.8
  2. 机器B局域网地址:192.168.9.9
  3. </code>
  1. <code>分别配置机器A、B的hosts地址:
  2. 配置机器A的地址:192.168.9.8 --> a.site.com
  3. 配置机器B的地址:192.168.9.9 --> b.site.com
  4. </code>

机器A为前端js代码 ,启动了服务,并在浏览器上请求 机器B(代表服务器端)
的第一个地址http://b.site.com:8080/login/... , 请求的同时 服务器端 注入了cookie,
设置 cookie 的key为‘site’,value为‘date’,doman 为 .site.com, path 为 /
,然后在浏览器上开新页面并在新页面请求 http://a.site.com:8080/index , 通过chrome控制台可以看到
http://b.site.com:8080/
注入的cookie,但是.......通过ajax走接口的时候,cookie并没有出现在请求头,试了多种方式,get、post、异步、同步都不行。最后使用了jsonp的方式,cookie出现了


不好用的代码如下:

  1. <code>$("a").click(function(event) {
  2. $.ajax({
  3. url: 'http://b.site.com:8080/test/test.htm',
  4. type: 'post',
  5. dataType: 'json',
  6. data: {'token': 'value'},
  7. })
  8. .done(function() {
  9. console.log("success");
  10. })
  11. .fail(function() {
  12. console.log("error");
  13. })
  14. .always(function() {
  15. console.log("complete");
  16. });
  17. });
  18. </code>

好用的代码如下:

  1. <code>function flightHandler(data) {
  2. console.log(data);
  3. // body...
  4. };
  5. $("a").click(function(event) {
  6. $.ajax({
  7. type: "get",
  8. url: "http://b.site.com:8080/test/test.htm",
  9. dataType: "jsonp",
  10. jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
  11. jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
  12. success: function(data){
  13. console.log(data);
  14. },
  15. error: function(){
  16. alert('fail');
  17. }
  18. });
  19. });
  20. </code>

请大神们帮忙看看,如能解惑,万分感谢

回复内容:

情景复现流程:

  1. <code>机器A局域网地址:192.168.9.8
  2. 机器B局域网地址:192.168.9.9
  3. </code>
  1. <code>分别配置机器A、B的hosts地址:
  2. 配置机器A的地址:192.168.9.8 --> a.site.com
  3. 配置机器B的地址:192.168.9.9 --> b.site.com
  4. </code>

机器A为前端js代码 ,启动了服务,并在浏览器上请求 机器B(代表服务器端)
的第一个地址http://b.site.com:8080/login/... , 请求的同时 服务器端 注入了cookie,
设置 cookie 的key为‘site’,value为‘date’,doman 为 .site.com, path 为 /
,然后在浏览器上开新页面并在新页面请求 http://a.site.com:8080/index , 通过chrome控制台可以看到
http://b.site.com:8080/
注入的cookie,但是.......通过ajax走接口的时候,cookie并没有出现在请求头,试了多种方式,get、post、异步、同步都不行。最后使用了jsonp的方式,cookie出现了


不好用的代码如下:

  1. <code>$("a").click(function(event) {
  2. $.ajax({
  3. url: 'http://b.site.com:8080/test/test.htm',
  4. type: 'post',
  5. dataType: 'json',
  6. data: {'token': 'value'},
  7. })
  8. .done(function() {
  9. console.log("success");
  10. })
  11. .fail(function() {
  12. console.log("error");
  13. })
  14. .always(function() {
  15. console.log("complete");
  16. });
  17. });
  18. </code>

好用的代码如下:

  1. <code>function flightHandler(data) {
  2. console.log(data);
  3. // body...
  4. };
  5. $("a").click(function(event) {
  6. $.ajax({
  7. type: "get",
  8. url: "http://b.site.com:8080/test/test.htm",
  9. dataType: "jsonp",
  10. jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
  11. jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
  12. success: function(data){
  13. console.log(data);
  14. },
  15. error: function(){
  16. alert('fail');
  17. }
  18. });
  19. });
  20. </code>

请大神们帮忙看看,如能解惑,万分感谢

withCredentials=true,并且保证服务端允许跨域,具体可以参考cors

domain不是你说是什么就是什么。cookie的domain和ajax的domain不是一回事

人气教程排行