在不同端口之间共享Cookie

时间:2017-07-28 16:09:50

标签: c# node.js google-chrome http cookies

我有一个托管在端口:80上的application1(C#)和托管在端口:3030上的应用程序2(nodejs)。两者都在localhost上。

请求工作流程如下:

  • 浏览器向应用程序1发送请求
  • 应用程序1发回cookie数量
  • 稍后在浏览器上将请求发送到应用程序2
  • ^问题是最后一步,cookie没有包含在请求中。

我尝试/理解的事情:

  • 我知道这是一个同源策略限制,并且由于端口号不同,浏览器会将它们视为不同的域。
  • 在应用程序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);
    

Cookies that come back from server Cookies that get stored in browser

服务器发回一个附有端口号的cookie,但浏览器似乎忽略了它。

这是我的ajax调用:

   var request = $.ajax({
        url: 'http://127.0.0.1:3030/SomeTask',
        type: 'POST',
        crossDomain: true,
    });

3 个答案:

答案 0 :(得分:6)

在这种情况下,您的域名是localhost,所以不应该有任何问题。

另一件事是:端口是URI的一部分,而不是域的一部分,域也是URI的一部分,所以你正在混合苹果和水果......

请参阅此another question in SO

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.comapp2.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)

您可以尝试以下两种不同的解决方案:

  1. 运行Apache服务器并将请求路由到任一服务器
  2. 在浏览器中禁用安全性(即相同的原始策略)。