2013-12-16 66 views
1

我對會話之類的知識很少,所以我被卡在這裏。在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); 

    } 

} 

}

網站中的每一頁都從這個類繼承。

如果誰能給我一個線索,我不知道此刻

感謝

+2

什麼是您在IIS中的身份驗證設置?如果您正在運行匿名身份驗證,我認爲這不起作用。 – Tobberoth

+0

我們有另外一個網站運行相同的代碼來獲取菜單項在同一個IIS服務器上工作,但我會看看 –

+0

我發現我使用的網站被設置爲運行匿名身份驗證,我將它關閉,重新啓動應用程序池,瞧!按預期工作!我已經提高了你的評論,但沒有人真正「回答」了這個問題,所以他們在這裏得到了正確答案。 –

回答

2

正如the comment在IIS中的提到的Tobberoth離開,關閉「匿名身份驗證」我將不勝感激。本網站應解決您的問題。這是因爲以下屬性:

HttpContext.Current.User.Identity.Name 

當您允許匿名身份驗證時通常爲空。見the MSDN article on that property

的用戶名是由 操作系統或其他認證提供者(如ASP.NET)傳遞給公共語言運行庫。

對於未經身份驗證的實體,名稱通常設置爲空字符串(「」),但可以採用其他值。

相關問題