Вопрос

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

Есть инновационные идеи???

Это было полезно?

Решение

Вам не нужен сеанс (или CallContext, или что-то еще), просто Синглтон «магазин пользователей» с одним ограничением:

После того, как пользователь вошел в систему или проявил какую-либо активность, вам необходимо сохранить дату/время этого.В следующий раз, когда пользователь захочет что-то сделать, просто сравните (lastactivity + logouttime) с фактической датой/временем.

Схема процесса может быть такой:

              [User login]
                   |
                   !
 [User 'store' saves user date + login time]
 [This is a singleton                      ]

                  ...

[Next time user wants to do something. The   ]
[program asks user data from the user 'store']
                   |
                   !
[If the actual time is greater than user     ]
[lastactivity + LOGOUTTIME, user cannot do it]
[If not, then update last activity           ]

UserStore может быть реализован как Словарь и используется как:

// Log in
Singleton.UserStore.Add("John", new UserData( yourUserObject, DateTime.Now));

...

// Check (ie. in a property-get)
var userData = Singleton.UserStore["John"];
if (userData.LastActivityDate + _LOGOUTIME > DateTime.Now()) 
{
   throw UserAutomaticallyLoggedOut();
}
else
{
   userData.LastActivityDate = DateTime.Now();
}

Другие советы

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

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

Сложнее всего здесь обнаружить взаимодействие с пользователем.В ASP.NET это довольно просто: по сути, вам нужно проверять только запросы страниц.В приложении Windows Forms вам потребуется отслеживать ввод на гораздо более детальном уровне (например, любое нажатие клавиши в любом текстовом поле будет взаимодействием с пользователем).Я думаю, что свойство KeyPreview вместе с прослушивателем событий KeyPress в форме может быть хорошим шагом вперед.

Ну, во-первых, что вы подразумеваете под неактивностью?В Интернете вы пытаетесь смоделировать состояние там, где его нет.Однако в клиентском приложении вы получаете всевозможные события, даже MouseMove.Основная идея состоит в том, что вы можете создавать пользовательские элементы управления из стандартных элементов управления вводом, таких как TextBox, Button и т. д., и заставлять их обновлять некий объект таймера при вызове событий.Другой вариант — отказаться от UserControl и просто обновить таймер в каждом создаваемом вами обработчике событий.Вероятно, было бы проще просто обновить таймер на основе событий MouseMove или KeyDown в самой форме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top