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>
正常情况
正常情况下,先点击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都是一样的效果,网上搜了下也没找到解决方案。
IISExpress 跨域cookie的奇怪问题的更多相关文章
- session,ajax 跨域cookie
什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来 ...
- iframe跨域cookie问题
今天在项目里面遇到了iframe跨域不能写cookie的问题.应用场景是这样的:有A和B两个业务,A要通过iframe的方式嵌入B,但是在ie下A不能通过写cookie的方式记录信息,在firefox ...
- CORS跨域cookie传递
服务端 Access-Control-Allow-Credentials:true Access-Control-Allow-Methods:* Access-Control-Allow-Origin ...
- safari跨域cookie的问题
最近做了一个项目,是将自己公司的H5页面嵌入到其他公司的pc和移动端,采用的方案是iframe,跨域数据传输用的postMessage,最后在联调过程中发现iPhone的微信中无法打开,在 Setti ...
- 关于php跨域cookie共享使用方法
A 服务器所在的域:a1.main.com,A 有应用 main.phpB 服务所在的域:b1.test.com,B 有应用 test.php 1.在 main.php 里设置 cookie 的时候, ...
- JavaScript创建读取cookie代码示例【附:跨域cookie解决办法】
使用JavaScript 原生存取cookie代码示例: var cookie = { set : function(name, value, expires, path, domain, secur ...
- vue -- 跨域cookie 丢失的问题
前端使用了vue-reource的$http进行请求后台接口 登陆完成后,服务端监控发现无法拿到cookie,下面看几张前端控制台监控的图 reqqust Header 没有显示cookie 信息 ...
- 关于跨域cookie,在代码无问题下,浏览器set-cookie显示有内容,但浏览器没写入cookie(刷新没有cookie)
在排除了代码的问题后,如 Domain 不一致,过期时间是基于当前时间增加过期时效的. 在排查返回请求时发现是过期时间的问题,设置的过期时间(Expire)小于请求的时间(Date)时,浏览器就会写不 ...
- Angularjs之如何在跨域请求中传输Cookie
一般情况我们在使用WebApi之类的技术时,都会遇到跨域的问题,这个只需要在服务端做一下处理即可. 如果这些GET或POST请求不需要传递Cookie数据的话,就没什么问题了,但如果需要,那么会发现 ...
- JS获取跨域的cookie实例
如果说JS能实现跨域cookie,你可能觉得不太可能实现,不过事实上,这个还是可以搞定的,不过需要一定的条件才行的哦!具体方案如下: 一共需要3个文件,第一个文件为需要获取cookie的页面,在这个页 ...
随机推荐
- vite配置开发环境和生产环境
为什么需要境变量的配置 在很多的时候,我们会遇见这样的问题. 开发环境的接口是:http://test.com/api 但是我们的生产环境地址是:http://yun.com/api 此时,我们打包的 ...
- 希尔伯特变换用于解调系统——以解调调频信号为例,FM Demodulation
What's The Hilbert Transform 简单地说,希尔伯特变换的物理意义为:把信号的所有频率分量的相位推迟90度,这样原信号和变换后信号可以视为一组IQ正交信号,在数字域正交化,可以 ...
- Fabric区块链浏览器(1)
本文是区块链浏览器系列的第三篇,本文介绍区块链浏览器的主体部分,即区块数据的解析. 这一版本的区块链浏览器是基于gin实现的,只提供三种接口: /block/upload:POST,上传Protobu ...
- vim 从嫌弃到依赖(17)——查找模式
最开始介绍vim的时候,提到vim有普通模式.插入模式.可视模式和命令行模式,并且已经对这几个模式做了详细的介绍了.除了这几个模式以外,vim还有一个非常强大的模式--查找模式,为什么最开始没有将其列 ...
- 强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE 算法
强化学习基础篇[1]:基础知识点.马尔科夫决策过程.蒙特卡洛策略梯度定理.REINFORCE 算法 1.强化学习基础知识点 智能体(agent):智能体是强化学习算法的主体,它能够根据经验做出主观判断 ...
- C++ Qt开发:TableWidget表格组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableWi ...
- Windows配置PHP的MongoDB扩展
环境 Windows 10 PHP 5.6.40/8.1.11 配置 下载MongoDB扩展 下载地址:https://pecl.php.net/package/mongodb 下载PHP版本对应的扩 ...
- 神经网络优化篇:将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural network)
将 Batch Norm 拟合进神经网络 假设有一个这样的神经网络,之前说过,可以认为每个单元负责计算两件事.第一,它先计算z,然后应用其到激活函数中再计算a,所以可以认为,每个圆圈代表着两步的计算过 ...
- GoodSync(最好的文件同步软件)
GoodSync是一款使用创新的最好的文件同步软件,可以在你的台式机.笔记本.USB外置驱动器等设备直接进行数据文件同步软件. GoodSync将高度稳定的可靠性和极其简单的易用性完美结合起来,可以实 ...
- 【AI视频教程】只需5步,AI作出鸡你太美视频
1.视频效果 黄昏见证虔诚的信徒 2.准备工作 制作视频效果,需要准备下面3个条件: 准备stable diffusion的环境 剪辑一段[鸡你太美]原版视频 stable diffusion安装sd ...