测试环境
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 }
网站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>
正常情况
正常情况下,先点击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都是一样的效果,网上搜了下也没找到解决方案。