我想在域名之间共享会话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." />
但是这次会议停止了工作。
有人可以帮我吗?
答案 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会话:
然后,您可以选择将数据存储在服务器上的数据库或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"
/>
这里有一些文档: