首页 > 其他分享 >AJAX请求,响应头有set-cookie但浏览器不能写入cookie问题解决!

AJAX请求,响应头有set-cookie但浏览器不能写入cookie问题解决!

时间:2023-07-15 10:56:06浏览次数:37  
标签:function cookies set form xhr AJAX cookie var

开幕雷击:AJAX就不是干这个

ajax只有向服务器发送请求时带上cookie的功能可选。
不存在ajax向服务器get的时候带回来cookie的功能。

image

解决

把AJAX代码改成原始的js代码来完成需求:

正确的js

document.addEventListener('DOMContentLoaded', function() {
  document.querySelector('.form-signin').addEventListener('submit', function(event) {
    event.preventDefault(); // 阻止表单默认的提交行为

    var form = this;
    var url = form.getAttribute('action');
    var formData = new FormData(form);

    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://localhost:8080/login', true);
    xhr.withCredentials = true; // 允许发送跨域Cookie

    xhr.onload = function() {
      if (xhr.status === 200) {
        console.log(xhr.responseText);
        console.log(xhr.status);

        var setCookieHeader = xhr.getResponseHeader('Set-Cookie');
        if (setCookieHeader) {
          var cookies = setCookieHeader.split(';');
          for (var i = 0; i < cookies.length; i++) {
            document.cookie = cookies[i];
          }
        }
        // 跳转到主页
        // window.location.href = 'http://localhost:63342/attendance/managView/index.html';
      } else {
        // 处理请求错误的情况
      }
    };

    xhr.onerror = function() {
      // 处理请求错误的情况
    };

    xhr.send(formData);
  });
});

错误存根

为了助于理解这里保留一份错误的ajax代码
悲剧的ajax

$(document).ready(function() {
        $('.form-signin').submit(function(event) {
            event.preventDefault(); // 阻止表单默认的提交行为

            var form = $(this);
            var url = form.attr('action');
            var formData = form.serialize();

            $.ajax({
                type: 'POST',
                url: 'http://localhost:8080/login',
                data: formData,
                success: function(response, status, xhr) {

                    console.log(response)
                    console.log(status)
                    console.log(xhr)


                    var setCookieHeader = xhr.getResponseHeader('Set-Cookie');
                    if (setCookieHeader) {
                        var cookies = setCookieHeader.split(';');
                        for (var i = 0; i < cookies.length; i++) {
                            document.cookie = cookies[i];
                        }
                    }
                    // 跳转到主页
                    // $(location).attr('href', 'http://localhost:63342/attendance/managView/index.html');
                },
                error: function(xhr, status, error) {
                    // 处理请求错误的情况
                }
            });

        });
    });

标签:function,cookies,set,form,xhr,AJAX,cookie,var
From: https://www.cnblogs.com/sugerqube/p/17555760.html

相关文章

  • abc082d <bitset 状压dp>
    题目D-FTRobot思路动态规划的方式记录每次行动后,机器人在坐标系中所有可能位置通过bitset对状态进行压缩,即每个位置有机器人trueor没有false因为机器人仅按坐标轴方向前进,因而可将xy坐标状态分开存储,进一步降低计算量,也方便使用bitset通过bitset的移位......
  • 131.Set和WeakSet结构
    131.Set和WeakSet结构?1.ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。2.WeakSet结构与Set类似,也是不重复的值的集合。但是WeakSet的成员只能是对象,而不能是其他类型的值。WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet......
  • 105.什么是SamesiteCookie属性
    105.什么是SamesiteCookie属性?SamesiteCookie表示同站cookie,避免cookie被第三方所利用。将Samesite设为strict,这种称为严格模式,表示这个cookie在任何情况下都不可能作为第三方cookie。将Samesite设为Lax,这种模式称为宽松模式,如果这个请求是个GET请求,并......
  • kubernetes之 statefulset控制器
    第九部分statefulset控制器参考:https://blog.csdn.net/styshoo/article/details/73731993     https://blog.51cto.com/xuexinhuan/5424144即便是有状态管理,也需要使用脚本来运维。CoreOS:OperatorStatusfulSet:有状态Cattle,petPetSet->StatefulSeta、稳定......
  • Atcoder AGC062C Mex of Subset Sum
    对\(a_i\)从小到大进行排序,因为想到若\(<a_{i-1}\)的不能取到的数因为\(a_i>a_{i-1}\)肯定是能保证取不到的。对排完序的\(a_i\)做一个前缀和\(s_i=\sum\limits_{j=1}^n\),令\(A_i\)为\(a_{1\simi}\)中无法表示为子序列之和且\(<s_i\)的正整数的集合......
  • cpuset.cpus.effective: no such file or directory (修改 docker cgroup 版本的方法)
    要切换使用v1版cgroup,需要做如下配置: vim/etc/default/grub   GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0" update-grubreboot  完美解决 ......
  • AJAX笔记
    第一章:原生AJAX1.1AJAX简介AJAX全称为AsynchronousJavaScriptAndXML,就是异步的JS和XML。通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。1.2XML简介XML可扩展标......
  • window.localStorage.setItem 和 localStorage.setItem 有什么区别
    window.localStorage.setItem和localStorage.setItem有什么区别在JavaScript中,localStorage.setItem和window.localStorage.setItem实际上是相同的,它们是对浏览器的本地存储(LocalStorage)进行操作的方法之一。localStorage是window对象的一个属性,因此可以通过window.loc......
  • unity3D制作并使用Assetbundles方法
    在网页中为了控制.unity文件的大小,加速载入速度,可以把系统用到的资源制作成Assestbundles,根据需要进行动态的加载和卸载。具体作法:1、使用脚本重新定义系统菜单,添加一个制作Assetbunles的菜单命令://C#Example//Buildsanassetbundlefromtheselected......
  • destoon列表性能优化,关于IN()与FIND_IN_SET
    destoon数据达到一定之后列表打开速度就很慢,于是为了解决这个问题,进行以下办法处理。找到/include/tag.func.php文件,找到这段代码: 原因:区别:1、in后面只能跟常量,find_in_set()函数可以使用常量或字段。2、in是完全匹配,find_in_set()函数是精确匹配,字段值以英文”,”分隔。......