我有一个在两个不同子域下运行的网站,我们称之为
foo.mydomain.com 和 的 bar.mydomain.com
我想让用户在这两个域之间共享他们的登录会话。 这就是我在web.xml中设置它的原因
<authentication mode="Forms">
<forms timeout="50000000" loginUrl="~/Login/Login.aspx?redirect=true" domain="mydomain.com"/>
</authentication>
基本上这很好用,但有例外:带保护模式的IE。在这种情况下,注销不再起作用。 保护模式关闭后一切正常。
IIS 7 / ASP.NET 3.5
答案 0 :(得分:0)
我想我自己找到了答案,问题如下:
在我设置域属性之前登录的用户有一个cookie .ASPXAUTH用于域
www.mydomain.com
现在,当用户带来这个cookie时,asp.net没有认出他已登录,但登录后他有两个.ASPXAUTH cookie设置,一个用于www.mydomain.com,另一个用于(新的) .mydomain.com来。这可能会混淆ASP.NET,并且用户无法正确登录。
我的解决方案是手动删除旧cookie。因为这个cookie只设置为http,所以使用JavaScript是不可能的,但我通过发送一个过时的(设置过期日期到昨天)cookie来管理它,该cookie具有相同的名称.ASPXAUTH和与旧cookie相同的域。后者我只是将域属性留空(然后cookie自动接收当前域名www.mydomain.com)
有点冗长的故事,但这看起来很漂亮。
答案 1 :(得分:0)
有趣的是,如果你有多个.ASPXAUTH cookie(在相同的域上),你将无法在Request.Cookies中看到它们,但是框架以某种方式知道cookie,并且将使用它找到的第一个 - 所以顺序也很重要。关于覆盖cookie的解决方案只有在cookie过期时才有效 - 这是我的经验。