ASP.NET: 403 - запрещено: доступ запрещен. У вас нет разрешения на просмотр этого каталога или страницы с использованием предоставленных вами учетных данных - PullRequest
0 голосов
/ 02 марта 2012

Когда действительный пользователь входит в систему и закрывает браузер без выхода из системы, это иногда (т.е. не сразу после, а на следующий день) не позволяет пользователю войти в систему, выдавая следующее:

Ошибка : 403 - Запрещено: доступ запрещен.У вас нет разрешения на просмотр этого каталога или страницы с использованием предоставленных вами учетных данных.

Этот вопрос относится к той же проблеме, но в своем решении он решил не использовать постоянные файлы cookie с помощьюПередав false в качестве параметра при создании FormsAuthenticationTicket, который не является желаемым решением.

Вот как я создаю cookie:

private void createCookie(string username, int customerID, bool persist)
{
    HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, persist);
    cookie.Expires = DateTime.Now.AddHours(12);
    var ticket = FormsAuthentication.Decrypt(cookie.Value);
    var userData = customerID.ToString();
    var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);
    cookie.Value = FormsAuthentication.Encrypt(newTicket);
    Response.Cookies.Add(cookie);
}

Любые идеи покак решить это?

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Когда действительный пользователь входит в систему и закрывает браузер без время от времени ( т.е. не сразу после, а в на следующий день ) не дает пользователю войти в систему ...

Я мог бы быть плотным, но разве код не работает так, как вы его реализовали?

А именно, в createCookie(): вы указываете cookie.Expires = DateTime.Now.AddHours(12);, который отмечает, что срок действия файла cookie истекает через 12 часов после его выпуска.

В Asp.net 1.0 , если установлено FormsAuthenticationTicket.IsPersistent, билет автоматически будет иметь действительную продолжительность 50 лет с момента его выдачи.

Однако в Asp.net 2.0 это уже не так. Если для FormsAuthenticationTicket.IsPersistent установлено значение false, билет будет иметь действительную продолжительность, идентичную периоду ожидания сеанса. Если для FormsAuthenticationTicket.IsPersistent установлено значение true, допустимая продолжительность по умолчанию будет соответствовать атрибуту тайм-аута проверки подлинности с помощью форм. У вас есть время истечения времени выдачи плюс 12 часов, поэтому я ожидаю, что билет перестанет работать через 12 часов. Предполагая, что вы используете Asp.net 2.0+, надеюсь, это объяснит поведение, которое вы видите. Я бы посоветовал попытаться увеличить время истечения до большей и посмотреть, исчезнет ли проблема.

0 голосов
/ 10 марта 2012

Не существует внутренней проблемы с включением ваших собственных пользовательских данных в файл cookie авторизации. На одном из наших веб-сайтов мы используем элемент управления входом asp.net и с большим успехом добавляем следующий прослушиватель событий:

    protected void Login1_LoggedIn(object sender, EventArgs e)
    {
        //... unimportant code left out

        //Update the users ticket with custom userInfo object
        string userData = userInfo.Id.ToString("N");
        HttpCookie cookie = Response.Cookies.Get(FormsAuthentication.FormsCookieName);
        FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
        FormsAuthenticationTicket newTicket =
            new FormsAuthenticationTicket(
                oldTicket.Version,
                oldTicket.Name,
                oldTicket.IssueDate,
                oldTicket.Expiration,
                oldTicket.IsPersistent,
                userData,
                oldTicket.CookiePath);
        cookie.Value = FormsAuthentication.Encrypt(newTicket);
 }
...