如何在单个asp.net网站上的多个域之间共享会话?

时间:2011-05-21 06:20:16

标签: asp.net session-cookies multiple-domains website-deployment

我想在域名之间共享会话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 个答案:

答案 0 :(得分:1)

您无法在名称不同top level domain的域名上共享Cookie。

这只能与subdomains进行。

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

答案 1 :(得分:1)

您无法直接在不同域之间共享Cookie。但是有一种方法可以在某种情况下使其成为可能。您可以在JS中发出JSONP请求或加载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>

答案 2 :(得分:0)

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

如danyolgiax建议的那样交换会话状态提供程序将无法解决您的问题,因为会话标识仍然发生在cookie中。因此,您需要研究一种方法,例如无cookie会话:

Cookieles sessions

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

修改

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

答案 3 :(得分:-1)

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