跨子域的ASP.NET MVC会话管理

3
在我的网站上,我实现了自定义会话值。在登录时,我将会话值设置为某个对象。该对象用于从数据库中提取特定于用户的数据。
现在的问题是:如果用户使用 test1.somesite.com 登录,然后注销并再次使用 test2.somesite.com 登录,该用户仍然从特定于 test1.somesite.com 的对象中接收数据。
问题在于,无论用户第一次使用哪个子域名登录,如果他使用另一个子域名登录,他总是从先前的子域名登录中获取数据。
在特定域名注销时,我清除了所有会话(尝试了所有方法):通过放置 HttpContext.session["UserDetail"] = null;、HttpContext.Session.Abandon() 和 HttpContext.Session.Clear(); 但似乎没有任何作用。
我也不太清楚会话变量在子域名之间如何处理。
我的意思是,如果我通过访问 test1.somesite.com 初始化一个会话,那么如果在同一台计算机和同一浏览器上还打开了 test2.somesite.com,那么该值是否也可见。
请帮忙解决这个问题。

HttpContext.Session.SessionId是否也匹配? - mxmissile
你在使用什么作为你的Session提供者?是应用程序?数据库?还是一些共享服务? - Pharcyde
2个回答

1
听起来像是一个cookie问题。尝试清除会话cookie。大致如下:
if (!User.Identity.IsAuthenticated)
{
    if (Request.Cookies["ASP.NET_SessionId"] != null)
    {
        Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddDays(-1);
    }
    Session.Abandon();
}

0
你需要做的是将你的asp.net会话ID cookie设置为写入通配符域名。
Response.Cookies("ASP.NET_SessionId").Domain = "yourdomain.com" // 或者 "*.yourdomain.com"
这样,cookie就可以漂浮到你的子域名。

我认为他不希望那种情况发生。 - Pharcyde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接