Request.IsAuthenticated всегда верно. Чего мне не хватает? - PullRequest
3 голосов
/ 11 февраля 2011

Я пытаюсь добавить имя пользователя в cookie и очистить его при выходе из системы, но Request.IsAuthenticated всегда возвращает true, поэтому я не могу узнать, является ли он участником или нет на следующей странице.

Вот что я пытаюсь:

 public void Logout()
    {
        FormsAuthentication.SignOut();
        Session.Abandon(); // trying everything...
    }



protected void signin_submit_Click(object sender, EventArgs e)
    {
        //checklogins...
        HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username_top.Text, true);
    }

Я щелкаю функцию «Выход из JavaScript», и она попадает в отладчик, поэтому я уверен, что она вызывается.

I 'm проверяет значение на Page_Load:

protected void Page_Load(object sender, EventArgs e)
    {
        bool isAuth = Request.IsAuthenticated; // always true !!!
        if (isAuth)
        {
            registeredDiv.Visible = true;
            guestDiv.Visible = false;
        }
    }

Что мне не хватает?Как я могу узнать, вошел ли пользователь в систему или нет?

Редактировать: Я обнаружил, что authenticationMode был установлен для Windows в web.config.

Отредактировал это как:

<authentication mode="Forms">

Но теперь он всегда возвращает false.Я попытался перенаправить после входа на ту же страницу, но все еще не работает.Есть идеи?

1 Ответ

7 голосов
/ 11 февраля 2011

Когда вы говорите, что нажимаете на отладчик и делаете вызов через Javascript, вы делаете это через ajax? Мне интересно, что вы действительно выходите из системы, но не перенаправляете пользователя, а это означает, что файл cookie, который есть у пользователя на этом компьютере, не перезаписывается / уничтожается, поэтому при следующем запросе страницы он снова работает, потому что файл cookie все еще работает. существует.

Когда пользователь нажимает кнопку выхода из системы на вашем сайте, вам действительно нужно, чтобы они перенаправили на новую страницу, чтобы куки могли быть установлены (или удалены) как есть ... Вот статья MSDN при выходе из системы проверки подлинности с помощью форм и его пример кода вызывает RedirectToLoginPage(), что позволит отсортировать файлы cookie, как упоминалось ранее.

Я нашел FireCookie для Firebug действительно полезным при отладке проблем, связанных с cookie.

Редактировать
Согласно статье MSDN, на которую я ссылался:

Вы можете использовать метод SignOut в в сочетании с RedirectToLoginPage метод, чтобы войти один пользователь и позволить другому пользователю войти в систему.

В вашем коде нет вызова RedirectToLoginPage, поэтому простого вызова FormsAuthentication.SignOut() недостаточно (если вы не собираетесь вручную выполнять работу RedirectToLoginPage)

Редактировать 2
Возможно, измените код кнопки входа, чтобы использовать эту функцию:

FormsAuthentication.RedirectFromLoginPage(username_top.Text, true)

Поскольку это автоматически позаботится о настройке всех файлов cookie ...

Редактировать 3
Рад, что вы разобрались, вышеприведенная функция (правка 2) просто сделала бы то, о чем вы сказали, что пропустила (добавив куки в ответ) ...

...