我有一个托管在端口: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);
服务器发回一个附有端口号的cookie,但浏览器似乎忽略了它。
这是我的ajax调用:
var request = $.ajax({
url: 'http://127.0.0.1:3030/SomeTask',
type: 'POST',
crossDomain: true,
});
答案 0 :(得分:6)
在这种情况下,您的域名是localhost,所以不应该有任何问题。
另一件事是:端口是URI的一部分,而不是域的一部分,域也是URI的一部分,所以你正在混合苹果和水果......
rfc明确指出
简介
由于历史原因,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
然后将cookie设置为没有端口
的域答案 1 :(得分:1)
为了共享Cookie,您的两个应用应位于同一个域中,例如app1.myapp.com
和app2.myapp.com
,这样他们就可以访问myapp.com
个Cookie。
您可以通过设置:
在本地模拟此项127.0.0.1 app1.myapp.com
127.0.0.1 app2.myapp.com
位于C:\Windows\System32\drivers\etc
或/etc/hosts
的主机文件中的
答案 2 :(得分:1)
您可以尝试以下两种不同的解决方案: