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都是一样的效果,网上搜了下也没找到解决方案。