Thread.CurrentPrincipal.Identity против HttpContext.User.Identity

Возможный дубликат:
https://stackoverflow.com/questions/3057937/difference-between-http-context-user-and-thread-currentprincipal-and-when-to-use

В чем разница между этими двумя в приложении ASP.NET?

Я знаю, что HttpContext.User.Identity устанавливается, когда пользователь аутентифицируется через FormsAuthentication. Но когда устанавливается Thread.CurrentPrincipal.Identity?

Всегда ли они имеют одно и то же значение?

Справедливо ли это по-прежнему для других слоев приложения, у которых нет доступа к HttpContext?


person bevacqua    schedule 25.07.2011    source источник


Ответы (2)


HttpContext.User.Identity — это текущий пользователь, вошедший в систему в вашем веб-приложении.

Thread.CurrentPrincipal применяется только тогда, когда <authentication mode = "windows"/>. Обычно это используется с приложениями на базе Windows (Winforms, WPF..)

person CharithJ    schedule 25.07.2011
comment
Thread.CurrentPrincipal все еще работает с mode="forms"... - person bevacqua; 25.07.2011
comment
@Nico: Но это не дает вам текущего пользователя для входа. Вместо этого он предоставит вам информацию о пользователе Windows. Итак, в этом случае Thread.CurrentPrincipal не имеет особого смысла. - person CharithJ; 25.07.2011
comment
При проверке подлинности с помощью форм Thread.CurrentPrincipal может стать несинхронизированным с HttpContext.User.Identity. См. этот старый блог от Hanselman. Также см. этот новый stackoverflow. - person subsci; 14.11.2013

если вы используете HttpContext.User.Identity, равно Thread.CurrentPrincipal

person yapingchen    schedule 25.07.2011
comment
Не правда. Если вы запускаете поток в фоновом режиме, HttpContext.User может измениться во время работы потока, в зависимости от того, как вы его запускаете. - person blowdart; 25.07.2011
comment
HttpContext.Current.User будет текущим зарегистрированным веб-пользователем. Thread.CurrentPrincipal будет основным для того, кто запускает рабочий процесс (Thread). В случае приложения forms/wpf это имеет смысл, потому что пользователь, под которым вы запускаете приложение, — это тот, кто вас интересует. - person Daniil T.; 17.09.2016