我对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);
}
}
}
网站中的每个页面都继承自此类。
如果有人能给我一个线索,我会非常感激,因为我目前没有任何线索
由于
答案 0 :(得分:2)
正如the comment留下的Tobberoth中所述,关闭此网站的IIS中的“匿名身份验证”可以解决您的问题。这是因为以下属性:
HttpContext.Current.User.Identity.Name
允许匿名身份验证时,通常为空。见the MSDN article on that property:
用户名由公共语言运行时传递给公共语言运行库 操作系统或其他身份验证提供程序(如ASP.NET)。
对于未经身份验证的名称,名称通常设置为空字符串(“”) 实体,但可以采取其他价值。