2011-07-25 13 views
14

thể trùng lặp:
difference between http.context.user and thread.currentprincipal and when to use them?Thread.CurrentPrincipal.Identity vs HttpContext.User.Identity

sự khác biệt giữa hai trong một ứng dụng ASP.NET là gì?

Tôi biết HttpContext.User.Identity được đặt khi người dùng được xác thực thông qua FormsAuthentication. Nhưng khi nào thiết lập Thread.CurrentPrincipal.Identity?

Họ luôn giữ cùng một giá trị?

Điều đó vẫn đúng với các lớp khác của ứng dụng không có quyền truy cập vào HttpContext?

Trả lời

10

HttpContext.User.Identity là người dùng đã đăng nhập hiện tại trong ứng dụng web của bạn.

Thread.CurrentPrincipal chỉ áp dụng khi <authentication mode = "windows"/>. Thông thường đây là sử dụng với các ứng dụng dựa trên Windows (Winforms, WPF ..)

+1

'Thread.CurrentPrincipal' vẫn hoạt động với 'mode = "hình thức" '... – bevacqua

+1

@Nico: Nhưng nó không cung cấp cho bạn người dùng đăng nhập hiện tại. Nó sẽ cung cấp cho bạn các chi tiết người dùng cửa sổ để thay thế. Vì vậy, trong trường hợp này Thread.CurrentPrincipal không có ý nghĩa nhiều. – CharithJ

+2

Trong Xác thực biểu mẫu, Thread.CurrentPrincipal có thể trở thành unsynched từ HttpContext.User.Identity. Xem blog cũ này từ [Hanselman] (http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx). Đồng thời xem [stackoverflow] mới hơn này (http://stackoverflow.com/a/16693746) – subsci

-3

nếu bạn sử dụng HttpContext.User.Identity bằng với Thread.CurrentPrincipal

+4

Không đúng sự thật. Nếu bạn quay một chuỗi trong nền, HttpContext.User có thể thay đổi trong khi luồng đang chạy, tùy thuộc vào cách bạn đang chạy nó. – blowdart

+1

HttpContext.Current.User sẽ là người dùng web đã đăng nhập hiện tại. Thread.CurrentPrincipal sẽ là hiệu trưởng cho bất kỳ ai đang chạy quy trình công nhân (Chủ đề). Trong trường hợp ứng dụng biểu mẫu/wpf, điều đó có ý nghĩa bởi vì người dùng bạn đang chạy ứng dụng là người bạn quan tâm. –

Các vấn đề liên quan