我想在域之间共享会话 cookie。

我有多个域:-

1. mydomain.com
2. mydomain.fr
3. mydomain.de
4. mydomain.da
...and many other language based

现在,我在服务器上部署了单个网站。 我想在单个网站上的不同域之间共享会话。我该如何实现这一目标?

我在网上找到的 <httpCookies domain=".mydomain.com" /> 但它适用于子域(例如 test.mydomain.comsecure.mydomain.com)但不适用于不同的域。

我也尝试过 <httpCookies domain=".mydomain." /> 但到了这次会议就停止工作了。

有人可以帮我吗?

有帮助吗?

解决方案

您不能在具有不同属性的域上共享 cookie 顶级域名 姓名。

这只能用 子域.

mydomain.com
fr.mydomain.com
de.mydomain.com
da.mydomain.com
...

其他提示

您不能直接在不同域之间共享 cookie。但有一种方法可以在某些情况下使其成为可能。您可以在 JS 中发出 JSONP 请求或加载 iframe。如果您使用 iframe,请使用表单进行 http POST 调用。表单标记将您的另一个域名作为操作,将 iframe 名称作为目标。表单将加载一个 iram,并且您的不同域的 cookie 将进入您的浏览器。

代码:

<iframe name="iframe-test" border="1px"></iframe>

<form id="iframe-form" target="iframe-test" action="http://differentdomain.com/setCookie" method="POST">
     <input type="hidden" value="1234" name="token">
   </form>

    <script type="text/javascript">
        function submitForm(){          
            var form = document.getElementById("iframe-form");
            form.submit();              
        }
    </script>

正如 Oded 所说,您不能在不同的顶级域之间共享 cookie。因此,您可能需要研究一种不同的持久会话方法。

按照 danyolgiax 的建议交换会话状态提供程序并不能解决您的问题,因为会话识别仍在使用 cookie 进行。因此,您需要研究一种方法,例如无 cookie 会话:

Cookieles 会话

然后您可以选择将数据存储在服务器上的数据库或 InProc 会话中。一旦您消除了对 cookie 的依赖。

编辑

此外,如果您使用非身份验证 cookie 的某些客户端活动绝对需要存在 cookie,您将根据这些服务器/会话存储的值从每个不同的域写入它们。因此,用户切换域最终会为每个域提供您的cookie。

如果您使用 SQL Server,我认为您可以将其用作会话状态提供程序。

在 web.config 中:

<sessionState 
        mode="SQLServer"
        sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
        cookieless="false" 
        timeout="20" 
/>

这里有一些文档:

http://msdn.microsoft.com/en-us/library/ms178581.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top