ASP.NET会话变量值交换

时间:2016-08-09 15:07:03

标签: c# asp.net-mvc session iis swap

我们在IIS 7.5和Windows Server 2008 R2上托管的ASP.NET MVC 4.0应用程序中遇到了很少的会话问题。我们的开发人员正在存储一些信息,如UserId,UserName和其他一些信息。

奇怪的是,我们注意到交换的会话变量(UserId)值。以下是我们如何托管我们的网站。

  • 应用程序虚拟目录

    • 应用程序核心虚拟目录
  • 应用程序B虚拟目录

    • 应用程序B核心虚拟目录

所有四个虚拟目录都在自己的应用程序池中运行,并且有自己的config和appsettings文件。应用程序虚拟目录和应用程序B虚拟目录指向两个不同的文件夹。应用程序核心虚拟目录和应用程序B核心虚拟目录指向同一核心文件夹,即完整的已发布代码文件夹。

下面是我们的会话管理器类,我们通过它设置和获取会话值。还有一个函数Ge​​tLoggedInUserId(),它返回会话中登录的用户ID。现在代码:

public static class SessionManager
{
    public static String GetSessionKeyValue(String pKey)
    {
        return HttpContext.Current.Session[pKey] == null ? null : HttpContext.Current.Session[pKey].ToString();
    }

    public static Boolean SetSessionKeyValue(String pKey, String pValue)
    {
        HttpContext.Current.Session[pKey] = pValue;
        return true;
    }

    public static Int32 GetLoggedInUserId()
    {
        return Int32.Parse(GetSessionKeyValue(SessionKeys.UserId));
    }

    public static Int32 GetLoggedInUserId(bool byPassSessionValidation)
    {
        if (byPassSessionValidation)
        {
            return -1; //Value returned as -1 because the user is not yet logged in.
        }
        else
        {
            return GetLoggedInUserId();
        }
    }        
}

SessionKeys是另一个静态类,如下所示:

public static class SessionKeys
{
    public const string UserId = "UserID";
    public const string ProviderId = "ProviderId";
    public const string LocationId = "LocID";
    public const string RoleId = "RoleId";
    public const string PracticeId = "PracticeId";
    public const string UserDefaultSearchOption = "UserDefaultSearchOption";
    public const string UserName = "UserName";
    public const string UserLoginMode = "UserLoginMode";
    public const string IsRibbonMenuEnabled = "IsRibbonMenuEnabled";
    public const string BrowserName = "BrowserName";
    public const string BrowserVersion = "BrowserVersion";
}

我们所有的应用程序数据库都有一些常用的登录名,分配了不同的用户ID。例如,用户登录为loginA的用户将在所有分配了diff用户ID的数据库的Users表中出现。当在浏览器中打开两个不同的应用程序并且loginA登录时,我会在两周内随机看到,登录的用户ID值将被交换,应用程序显示不同的用户详细信息而不是登录的用户名。

有人可以帮助我们找出问题所在吗?提前谢谢。

0 个答案:

没有答案