2011-07-25 89 views
14

可能重複:
difference between http.context.user and thread.currentprincipal and when to use them?Thread.CurrentPrincipal.Identity VS HttpContext.User.Identity

是什麼在ASP.NET應用程序中這兩者之間的區別?

我知道當用戶通過FormsAuthentication認證的HttpContext.User.Identity設置。但是什麼時候設置了Thread.CurrentPrincipal.Identity

難道他們始終保持相同的值?

這是否仍然適用於那些沒有訪問HttpContext應用程序的其他層?

回答

10

HttpContext.User.Identity是登錄的用戶在你的web應用程序的電流。

Thread.CurrentPrincipal應用<authentication mode = "windows"/>只有當。通常,這是與基於Windows的應用程序中使用(的WinForms,WPF ..)

+1

'Thread.CurrentPrincipal'仍然有效使用'模式= 「形式」 '... – bevacqua

+1

@Nico:但它不會給你當前的登錄用戶。它會給你的Windows用戶的細節。所以,在這種情況下,Thread.CurrentPrincipal沒有多大意義。 – CharithJ

+2

在Forms Authentication中,Thread.CurrentPrincipal可能會與HttpContext.User.Identity不一致。請參閱從[Hanselman的(http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx)這個老博客。另請參閱此更新[stackoverflow](http://stackoverflow.com/a/16693746) – subsci

-3

如果使用HttpContext.User.Identity等於Thread.CurrentPrincipal中

+4

不正確。如果您在後臺分離線程,HttpContext.User可能會在線程運行時發生更改,具體取決於您如何運行線程。 – blowdart

+1

HttpContext.Current.User將是當前登錄的Web用戶。 Thread.CurrentPrincipal將成爲任何運行工作進程(線程)的主體。 對於forms/wpf應用程序,這很有意義,因爲您正在運行應用程序的用戶是您感興趣的用戶。 –

相關問題