Что такое хороший шаблон разработки для хранения Пользователя Последняя информация о Входе в систему?

Можно также использовать связываемое выполнение. Полезный материал, особенно если Вы хотите добавить некоторое текстовое форматирование (цвета, насыщенность шрифта и т.д.).


   
   
   

Вот исходный класс:
Здесь некоторые дополнительные улучшения.
И это - все в одной части кода:

public class BindableRun : Run
    {
        public static readonly DependencyProperty BoundTextProperty = DependencyProperty.Register("BoundText", typeof(string), typeof(BindableRun), new PropertyMetadata(new PropertyChangedCallback(BindableRun.onBoundTextChanged)));

        private static void onBoundTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ((Run)d).Text = (string)e.NewValue;
        }

        public String BoundText
        {
            get { return (string)GetValue(BoundTextProperty); }
            set { SetValue(BoundTextProperty, value); }
        }

        public BindableRun()
            : base()
        {
            Binding b = new Binding("DataContext");
            b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1);
            this.SetBinding(DataContextProperty, b);
        }
    }

6
задан niton 21 April 2015 в 23:47
поделиться

3 ответа

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

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

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

ОБНОВЛЕНИЕ

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

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

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

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

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

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

5
ответ дан 11 December 2019 в 03:14
поделиться

Есть еще пара способов сделать это ...

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

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

  3. Прошло некоторое время, но было своего рода промежуточное ПО, которое asp.net позволяло наследовать от базового класса и реализовывать код, обрабатывающий предварительные или после начала / окончания сеанса. Я давно не занимался ASP, поэтому я не очень хорошо понимаю это.

1
ответ дан 11 December 2019 в 03:14
поделиться

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

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

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

0
ответ дан 11 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: