Что такое хороший шаблон проектирования для хранения информации о последнем входе пользователя? - PullRequest
6 голосов
/ 13 сентября 2009

Я разрабатываю функцию для сохранения даты и времени последнего входа в приложение ASP.Net (MVC).

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

План Б: Поле для записи предыдущего сеанса и одно для записи этого сеанса. При входе в систему сохраните дату / время этого сеанса в поле «текущий» и переместите ранее найденное значение в поле «предыдущий» (очевидно). Именно в этом поле указано мое значение «последний вход в систему».

Это лучший подход или его можно сделать более элегантно?

Ответы [ 3 ]

5 голосов
/ 13 сентября 2009

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

Старое время будет удалено, когда истечет время сеанса, обычно это когда пользователь все равно должен повторно войти в систему. Он также имеет преимущество в скорости и кешировании, так как читает из сессии / cookie.

Но это зависит от вашей настройки и приложения, возможно ли это для вас.

UPDATE

Просто чтобы прояснить ... Текущая дата / время сохраняется в пользовательской таблице базы данных каждый раз, когда пользователь входит в систему. Но перед тем, как дата / время записываются в пользовательскую таблицу, существующее значение читается и сохраняется в сеанс или cookie. Затем вы обновляете значение даты / времени в пользовательской таблице с помощью текущей отметки времени.

Если ваш билет проверки подлинности длится дольше, чем сеанс, тогда используйте метод cookie и установите срок действия cookie равным сроку действия билета проверки подлинности.

1 голос
/ 13 сентября 2009

Есть несколько других способов сделать это ...

  1. Вместо того, чтобы иметь столбец в записи пользователя, у вас может быть отдельная таблица, в которой регистрируются все логины. Это также предоставит вам возможность «показывать последние 5 входов в систему», если важно видеть дату последнего входа в систему или вести статистику по данным для входа в систему для последующего составления отчетов. (Это накапливает данные с течением времени и, возможно, потребует какой-то процедуры очистки или сценария расписания.)

  2. В global.asax есть событие Session_End (или что-то подобное). Когда пользователь впервые регистрирует это значение, оно может быть сохранено в переменной сеанса, а когда запускается Session_End, оно записывается в базу данных. Этот метод, вероятно, в конечном итоге вызовет больше странностей, чем стоит, поскольку вам всегда будет интересно, что произойдет, если Session_End не сработает или если пользователь повторно войдет в систему до того, как Session_End сработает для первого входа в систему.

  3. Это было какое-то время, но было какое-то промежуточное программное обеспечение, которое asp.net позволяло вам наследовать от базового класса и реализовывать код, который обрабатывает начало / конец до или после сеанса. Я давно не занимался ASP, поэтому я довольно туманно по этому поводу.

0 голосов
/ 13 сентября 2009

Как насчет создания настраиваемого сериализуемого класса, который реализует эту функциональность?

Такой класс можно просто сериализовать / десериализовать как большой двоичный объект в профиле пользователя. Если вам не нужно запрашивать дату последнего входа в систему, это может быть хорошим решением.

Моей первой мыслью было просто использовать Stack<T> для реализации этого, но, хотя он и сериализуем, он не предоставляет хуков, которые автоматически вытеснят старые значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...