2

我想在域之间共享会话 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." />,但到了这次会议停止工作。

有人可以帮我吗?

4

4 回答 4

1

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

这仅适用于子域

mydomain.com
fr.mydomain.com
de.mydomain.com
da.mydomain.com
...
于 2011-05-21T06:22:03.757 回答
1

您不能直接在不同域之间共享 cookie。但是有一种方法可以在某些情况下使其成为可能。您可以发出 JSONP 请求或在 JS 中加载 iframe。如果您使用 iframe,请使用表单进行 http POST 调用。表单标签将您的另一个域名作为操作,将 iframe 名称作为目标。什么形式会加载一个 ifram 并且您不同域的 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>
于 2011-09-29T05:00:02.367 回答
0

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

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

饼干会话

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

编辑

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

于 2011-05-21T14:05:46.447 回答
-2

如果您使用的是 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

于 2011-05-21T06:26:42.043 回答