sco*_*211 9 c# cookies google-chrome http node.js
我有一个托管在端口:80上的application1(C#)和托管在端口:3030上的应用程序2(nodejs).两者都在localhost上.
请求工作流程如下:
我尝试/理解的事情:
在应用程序1(它使用System.Web.HttpCookie)中,我试图将域设置为特定于端口("127.0.0.1:3030"),但似乎浏览器不接受它或忽略它.
//c# code
var testCookie1 = new HttpCookie("Test", "testValue");
testCookie1.Domain = "127.0.0.1:3030";
testCookie1.Path = "/";
testCookie1.Expires = DateTime.Now.AddDays(1);
Response.SetCookie(testCookie1);
var testCookie2 = new HttpCookie("Test2", "testValue2");
testCookie2.Domain = "127.0.0.1";
testCookie2.Path = "/";
testCookie2.Expires = DateTime.Now.AddDays(1);
Response.SetCookie(testCookie2);
Run Code Online (Sandbox Code Playgroud)服务器发回一个附有端口号的cookie,但浏览器似乎忽略了它.
这是我的ajax调用:
var request = $.ajax({
url: 'http://127.0.0.1:3030/SomeTask',
type: 'POST',
crossDomain: true,
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的域名是localhost,所以应该没有任何问题.
另一件事是:端口是URI的一部分,而不是域的一部分,域也是URI的一部分,所以你正在混合苹果和水果......
请参考SO中的另一个问题
该委员会明确指出
介绍
由于历史原因,cookie包含许多安全和隐私信息.例如,服务器可以指示给定的cookie用于"安全"连接,但Secure属性在存在活动网络攻击者时不提供完整性.同样,给定主机的cookie在该主机上的所有端口之间共享,即使Web浏览器使用的通常的"同源策略"隔离了通过不同端口检索的内容.
我自己没试过.
在我的工作中,我们必须在子域(而不是端口)之间共享cookie,在域前设置一个点
var testCookie1 = new HttpCookie("Test", "testValue");
testCookie1.Domain = "." + mydomain;
这样x.mydomain和y.mydomain将共享cookie.
因此,尽量不要在cookie中设置端口,并使用名称localhost而不是已解析的ipaddress.
您可以在主机文件中模拟生产设置,例如:
127.0.0.1 myawesomesubdomain.thisdomainnotexist.com.tr
Run Code Online (Sandbox Code Playgroud)
然后将cookie设置为没有端口的域