Как я могу зарегистрировать любую операцию входа в систему в случае опции «Запомнить меня»? - PullRequest
0 голосов
/ 11 октября 2010

У меня есть веб-форма для входа в asp.net, в которой есть (имя пользователя textBox - пароль textBox) плюс опция Запомнить меня CheckBox При входе пользователя я делаю следующий код

if (provider.ValidateUser(username, password))
{
    int timeOut = 0x13;
    DateTime expireDate = DateTime.Now.AddMinutes(19.0);
    if (rememberMeCheckBox.Checked)
    {
        timeOut = 0x80520;
        expireDate = DateTime.Now.AddYears(1);
    }

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(username, true, timeOut);
    string cookieValue = FormsAuthentication.Encrypt(ticket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue);
    cookie.Expires = expireDate;
    HttpContext.Current.Response.Cookies.Add(cookie);

    AddForLogin(username);
    Response.Redirect("...");
}

, как в коде после аутентификации пользователяЯ регистрирую, что он входит в БД, вызывая метод AddForLogin(username);
Но если пользователь выбирает запомнить меня при входе в систему, а затем он пытается зайти на сайт в любое время, когда этот метод входа не выполняется, так как он использует куки ... так что яУ меня много вопросов:

1- Это лучший способ войти в систему при входе в систему или есть еще что-нибудь лучше?
2- В моем случае, как записать операцию при входе в систему, если пользователь запомнил меня?

Ответы [ 5 ]

0 голосов
/ 25 октября 2010

Вот мое мнение после прочтения всех других ответов.

Ниже приведена моя идея с учетом производительности:

  1. Создайте настройки интервала входа в систему, скажем, 12 часов или 24 часа (на ваш выбор). Вы можете сохранить эти настройки в web.config appSettings. Чем меньше значение, тем выше производительность.

  2. Когда пользователи успешно входят в систему на странице входа вручную, зарегистрируйте ее в своем хранилище данных и установите файл cookie с текущей датой-временем (Last logged date-time login).

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

0 голосов
/ 25 октября 2010

Если я понимаю, что вы надеетесь выполнить, возможно FormsAuthentication_OnAuthenticate в вашем классе приложения (global.asax.cs) будет правильным местом для входа в систему?

0 голосов
/ 19 октября 2010

В настоящее время у вас недостаточно информации, чтобы различать два случая. Я думаю, что самый простой способ сделать то, что вы хотите, это добавить временный cookie-файл, когда пользователь входит в систему, а затем в классе вашей страницы, если временный cookie-файл отсутствует, тогда он использует параметр запомнить меня. Затем вы можете войти в систему и установить временное печенье.

0 голосов
/ 24 октября 2010

То, что я закончил в одном приложении, которое я использовал, было в Session_Start(), если они вошли в систему, и выполнил регистрацию там. Я обнаружил, что это действительно захватывало людей, чей вход в систему был успешным из-за того, что их cookie-файл для входа еще действителен (поэтому им не нужно было явно входить в систему)

Вам придется проверить, как это влияет на обычные входы в систему, чтобы убедиться, что вы не регистрируете их дважды, но это достаточно просто, чтобы понять. Мое приложение фактически исключает вход в систему, когда последний вход был в течение 5 минут, но это также ограничивает количество записей.

0 голосов
/ 11 октября 2010

Лучший способ реализовать операцию входа в систему - реализовать свой дизайн входа в систему. Похоже, в вашем коде вы используете встроенную функциональность и регистрируете пользовательскую информацию.

Чтобы зарегистрировать информацию для входа в систему, вы можете настроить Provider . На самом деле будут некоторые изменения в БД, но вы можете обрабатывать их с помощью хранимых процедур без изменений во всем коде. Например, создайте новая таблица, которая содержит столько информации, сколько вы хотите, включая операцию входа (я имею в виду, как пользователь вошел в систему, это в первый раз или уже выбран пользователь, запомните меня, чтобы пользователь вошел в систему с помощью cookie )

С наилучшими пожеланиями
Myra

...