如何在单个asp.net网站上的多个域之间共享会话?
-
08-09-2020 - |
题
我想在域之间共享会话 cookie。
我有多个域:-
1. mydomain.com
2. mydomain.fr
3. mydomain.de
4. mydomain.da
...and many other language based
现在,我在服务器上部署了单个网站。 我想在单个网站上的不同域之间共享会话。我该如何实现这一目标?
我在网上找到的 <httpCookies domain=".mydomain.com" />
但它适用于子域(例如 test.mydomain.com
和 secure.mydomain.com
)但不适用于不同的域。
我也尝试过 <httpCookies domain=".mydomain." />
但到了这次会议就停止工作了。
有人可以帮我吗?
其他提示
您不能直接在不同域之间共享 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 会话:
然后您可以选择将数据存储在服务器上的数据库或 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"
/>
这里有一些文档: