在Visual Studio Debug中找到的会话用户名,但不是已发布的版本

时间:2013-12-16 12:15:08

标签: c# asp.net visual-studio-2010 session

我对Sessions等的了解很少,所以我被困在这里。

我有一个在Visual Studio中完美运行的网站。它获取登录到Windows的用户名(无网站登录),并查询数据库以查找他们可以查看的菜单项。

在运行网站的Visual Studio中,我可以看到我应该使用的所有菜单以及一系列SQL分析器告诉我它正在使用正确的用户名。

然后我将网站发布到IIS并尝试使用它,根本没有菜单显示。我运行探查器,发现它正在搜索空白用户名。

这告诉我,由于某种原因,用户名未在发布的网站上成功检索。

该网站似乎使用“HttpContext.Current.User.Identity.Name”函数填充了一个名为SessionControl的类,但我不明白为什么它在VS中有效但在已发布的版本中无效。

我正在使用:

C#ASP.Net Visual Studio 2010 SQL Server 2008

代码:

public class SessionControl
{

// Gets the current session.
public static SessionControl Current
{
    get
    {
        SessionControl session = (SessionControl)HttpContext.Current.Session["__mySession__"];
        if (session == null)
        {
            session = new SessionControl();
            HttpContext.Current.Session["__mySession__"] = session;
        }
        return session;
    }
}

// Declares username session object and properties
public string sesUserName { get; set; }

}

这似乎被填补:

public class BasePageClass : System.Web.UI.Page, IRequiresSessionState
{

/// <summary>
/// Override of base OnLoad sub that initialises session
/// </summary>
/// <param name="e">Eventargs</param>
/// <remarks>Overrides the default OnLooad sub. Checks if session username is 
/// populated. If not formats username and adds to current session.</remarks>
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    if (SessionControl.Current.sesUserName == null)
    {
        AuthenticationHelper authenticationHelper = new AuthenticationHelper();
        SessionControl.Current.sesUserName = authenticationHelper.StripDomainFromUser(HttpContext.Current.User.Identity.Name);

    }

}

}

网站中的每个页面都继承自此类。

如果有人能给我一个线索,我会非常感激,因为我目前没有任何线索

由于

1 个答案:

答案 0 :(得分:2)

正如the comment留下的Tobberoth中所述,关闭此网站的IIS中的“匿名身份验证”可以解决您的问题。这是因为以下属性:

HttpContext.Current.User.Identity.Name
允许匿名身份验证时,

通常为空。见the MSDN article on that property

  

用户名由公共语言运行时传递给公共语言运行库   操作系统或其他身份验证提供程序(如ASP.NET)。

     

对于未经身份验证的名称,名称通常设置为空字符串(“”)   实体,但可以采取其他价值。