2009-03-25 3 views
4

Когда пользователь регистрируется на моем сайте, дата посещения указывается в базе данных (таблица пользователей). Это обрабатывается поставщиком (пользовательским) членством. Однако, если пользователь проверяет «Запомнить меня?» при входе в систему они (естественно) не запрашиваются для входа в систему при последующих посещениях. Поскольку поставщик членства не используется в этой ситуации, последняя дата входа не обновляется в базе данных.Как обновить дату последнего входа, если «Запомнить меня»?

Использование проверки подлинности форм, как я могу гарантировать, что последняя дата входа обновляется при каждом новом посещении сайта, а не только при физическом входе в систему? Есть ли какое-нибудь событие, которое я могу сделать для этого?

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

Благодаря

ответ

2

Я предполагаю, что вы используете куки (я не могу видеть, как «Запомнить меня» будет работать в противном случае).

Когда пользователь входит в систему, установите два куки-файла, один постоянный (если отмечен «Запомнить меня») и один временный (этот сеанс). Второй - это то, что вы используете для авторизации пользователя.

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

+0

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

0

Предполагая, что вы говорите об ASP.NET 2.0 (учитывая комментарий поставщика членства).

Где бы вы ни проверяли файл cookie, чтобы узнать, должен ли пользователь быть автологизирован, вы должны обратиться к функции GetUser поставщика членства, которая принимает логическое значение для обновления даты активности пользователя.

согласно MSDN docs:

MembershipProvider.GetUser Метод

принимает, в качестве входных данных, уникального идентификатора пользователя и логическое значение, указывающее, следует ли обновить LastActivityDate значение для пользователя, чтобы показать, что пользователь в настоящее время в сети. Метод GetUser возвращает объект MembershipUser, заполненный текущими значениями из источника данных для указанного пользователя. Если имя пользователя не найдено в источнике данных, метод GetUser возвращает значение null (Nothing в Visual Basic).

+1

Спасибо за быстрый ответ. Я использую ASP.Net 3.5. Я сам не проверяю cookie - .Net работает с ним автоматически. Я не знаю, как/где подключиться к шагу, где .NET выполняет свои проверки файлов cookie. –