我對會話之類的知識很少,所以我被卡在這裏。在Visual Studio調試中發現的會話用戶名但未發佈版本
我有一個在Visual Studio中完美工作的網站。它獲取登錄到Windows的用戶的用戶名(無網站登錄)並查詢數據庫以查找他們可以查看的菜單項。
在運行網站的Visual Studio中,我可以看到所有我應該看到的菜單,並且運行SQL Profiler告訴我它正在使用正確的用戶名。
然後,我發佈了網站到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);
}
}
}
網站中的每一頁都從這個類繼承。
如果誰能給我一個線索,我不知道此刻
感謝
什麼是您在IIS中的身份驗證設置?如果您正在運行匿名身份驗證,我認爲這不起作用。 – Tobberoth
我們有另外一個網站運行相同的代碼來獲取菜單項在同一個IIS服務器上工作,但我會看看 –
我發現我使用的網站被設置爲運行匿名身份驗證,我將它關閉,重新啓動應用程序池,瞧!按預期工作!我已經提高了你的評論,但沒有人真正「回答」了這個問題,所以他們在這裏得到了正確答案。 –