跨子域的ASP.NET MVC会话

时间:2010-03-24 04:00:30

标签: asp.net asp.net-mvc session subdomain

在我的网站中,我实现了自定义会话值。其中,在登录时我将会话值设置为某个对象。此对象用于从db。

中提取用户特定数据

现在问题是如果用户使用以下命令登录:test1.somesite.com并注销并再次使用以下命令登录:test2.somesite.com用户仍然从特定于test1.somesite.com的对象接收数据。< / p>

关键是当用户第一次登录时,如果他使用另一个子域登录,他总是从先前的子域登录获取数据。

从特定域注销我清除了所有会话(尝试了所有内容):通过放置HttpContext.session [“UserDetail”] = null;,HttpContext.Session.Abandon()以及HttpContext.Session.Clear();

但似乎没有任何效果

我也不太了解如何跨子域处理会话变量。

我的意思是,如果我通过访问test1.somesite.com来初始化一个具有一个值的会话,如果在同一台计算机上并且在同一个浏览器上我也打开test2.somesite.com,那么该值也是可见的。

任何帮助,请

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

您需要做的是设置您的asp.net会话ID cookie以写入外卡域。

Response.Cookies(“ASP.NET_SessionId”)。Domain =“yourdomain.com”//或“* .yourdomain.com”

这样cookie就可以浮动到你的子域。