Начало сеанса Global.asax C # ASP.NET - PullRequest
0 голосов
/ 04 мая 2018

У меня есть следующий код:

protected void Session_Start(object sender, EventArgs e)
    {
        WindowsPrincipal p = Thread.CurrentPrincipal as WindowsPrincipal;
        string sUserAccount = HttpContext.Current.User.Identity.Name.ToString();

        HttpContext.Current.Session["WinAccount"] = sUserAccount;
    }

Код для получения имени пользователя Windows. Из session_start я хочу создать сеанс, который называется WinAccount. Но когда я попытался вызвать сеанс с одной из моих страниц (default.aspx), на которой есть master page.

Допустим, на page_load:

string sWinAccount = Session["WinAccount"].ToString();
Label1.Text = sWinAccount.ToString();

web.config выглядит так:

<authentication mode="Windows"/>
<identity impersonate="false"/>
<authorization>
  <deny users="?"/>
</authorization>

Также в свойствах проекта включен режим аутентификации Windows.

Когда я бегу, он пропадает. Пожалуйста, сообщите.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Событие Session_Start наступает, когда новый клиент запускает свой самый первый запрос к приложению, а не когда пользователь вошел в систему. Так что в вашем случае HttpContext.Current.User.Identity.Name пуст во время вызова Session_Start. Сработало как положено.

0 голосов
/ 04 мая 2018
  1. Убедитесь, что приложение использует проверку подлинности Windows (проверьте web.config). Если вы предоставляете пользовательскую аутентификацию или аутентификацию на основе форм, вам нужно будет указать данные пользователя для обработчика успеха, а не для начала сеанса; и использовать CustomPrincipal, а не WindowsPrincipal.
  2. Если включена проверка подлинности Windows, учетные данные пользователя будут доступны по самому первому запросу (запуск сеанса) и могут быть получены, если вы упоминаете их в своем коде. Поместите отладчик в начало сеанса и проверьте, правильно ли вы его извлекаете.
0 голосов
/ 04 мая 2018

1001 * попробовать *

string sUserAccount =System.Security.Principal.WindowsIdentity.GetCurrent().Name.Tostring();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...