• IISExpress 跨域cookie的奇怪问题


    测试环境

    WIN10,IIS 10,IISExpress 10,Chrome 120,Microsoft Edge 114

    网站A 端口7001

    只有1个Default.aspx,无前端代码。逻辑很简单,SetCookie用来把客户端传过来的值写入到cookie中,GetCookie用来将客户端传过来的cookie值再返回给客户端。

     1 protected void Page_Load(object sender, EventArgs e)
     2 {
     3     string Type = Request["Type"];
     4     if(Type=="SetCookie")
     5     {
     6         Response.Cookies.Add(new HttpCookie("CK",Request["Value"]));
     7         Response.Write("SetCookie OK");
     8     }
     9     else if (Type == "GetCookie")
    10     {
    11         var ck = Request.Cookies["CK"];
    12         if(ck==null)
    13         {
    14             Response.Write("无Cookie");
    15         }
    16         else
    17         {
    18             Response.Write(ck.Value);
    19         }
    20     }
    21 
    22     Response.Headers.Add("Access-Control-Allow-Credentials", "true");
    23     Response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:7002");
    24     Response.Headers.Add("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,HEAD,OPTIONS");
    25     Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type,api_key,Authorization,X-Requested-With");
    26     Response.Headers.Add("Access-Control-Allow-Private-Network", "*");
    27 }
    Page_Load事件代码

    网站B 端口7002

    只有1个Default.aspx,只有前端代码。SetCookie按钮用ajax将随机数传给服务端,GetCookie按钮用来将cookie发给服务端再返回cookie值

     1 <input id="btnSetCookie" type="button" value="SetCookie" onclick="SetCookie()" />
     2 <input id="btnGetCookie" type="button" value="GetCookie" onclick="GetCookie()" />
     3 
     4 <script type="text/javascript">
     5     function SetCookie() {
     6         $.ajax({
     7             url: "http://localhost:7001/Default.aspx?Type=SetCookie&Value=" + parseInt(Math.random() * 100000),
     8             type: 'GET',
     9             xhrFields: {
    10                 withCredentials: true
    11             }
    12         });
    13     }
    14 
    15     function GetCookie() {
    16         $.ajax({
    17             url: "http://localhost:7001/Default.aspx?Type=GetCookie",
    18             type: 'GET',
    19             xhrFields: {
    20                 withCredentials: true
    21             },
    22         });
    23     }
    24 script>
    View Code

    正常情况

    正常情况下,先点击SetCookie按钮再点击GetCookie按钮,会是下图的情况,GetCookie获取到的值是SetCookie发送的值

    异常情况

    当两个网站都用IISExpress部署时,就会发生奇怪的事情

    第一次操作时,SetCookie成功,但是GetCookie却是上一次的值,给人的感觉是浏览器设置cookie没成功。后面连续又操作了多次,却都是成功的。
    我把IISExpress重新部署多次测试发现,上面的情况是偶发的,有时候一直正常,有时候第一次操作会出现设置cookie没成功的情况。
    直接访问7001端口的网站,不跨域,就每次都是成功的。

     

    我又换了多种不同的部署方式:

    IISExpress部署7001网站A,IIS部署7002网站B,依然会偶发出现。
    IIS部署7001网站A,IISExpress部署7002网站B,每次都成功。
    都用IIS部署,每次都成功。

    使用Chrome和Edge都是一样的效果,网上搜了下也没找到解决方案。

     

  • 相关阅读:
    DO280OpenShift命令及故障排查--常见故障排除和章节实验
    Windows11安装Vim编辑器配置指南
    SpringBoot基础知识和运行
    这款微信插件太好用了
    Day44-JSP基础语法与指令、JVM原理(补充了解)
    连接池优化
    YOLOv8 C2f模块融合shuffleAttention注意力机制
    生成式AI - 大模型(LLM)提示工程(Prompt)技巧
    Go语言之JSON使用
    CentOS系统安装vsftpd
  • 原文地址:https://www.cnblogs.com/jintianhu/p/18054296