2010-10-11 2 views
0

У меня есть веб-формы 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("..."); 
} 

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

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

+0

Я хочу У меня есть хорошее решение –

ответ

0

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

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

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

0

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

+0

+1 от меня, простого решения, и надежно (до тех пор, пока пользователь не удалит этот конкретный куки) – Onkelborg

0

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

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

+0

Сессия не может быть использована для этого, они могут триггер ложных тревог (пример: пользователь подписывается, перемещается в сторону, но не закрывает браузер. Возвращает, новый сеанс: будильник! Но это ложный сигнал, успешный логин не был вызван функцией «rememeber me») – Onkelborg

+0

Not если они вернутся в течение таймаута сеанса. И дополнительный журнал входа в этот случай может быть намного лучше, чем пропущенный журнал целиком. –

-1

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

+0

Возможно, это не так, поскольку это вызовет каждый вызов приложения – Onkelborg

0

Вот мое мнение, прочитав все остальные ответы.

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

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

  2. при входе пользователей успешно на странице входа в систему вручную, бревенчатый его в хранилище и установить куки с текущей даты-времени (Last вошли входа DateTime).

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