Имитация сеанса в приложении Windows - PullRequest
2 голосов
/ 29 апреля 2009

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

Какие-нибудь инновационные идеи ???

Ответы [ 4 ]

2 голосов
/ 29 апреля 2009

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

После того, как пользователь вошел в систему или показал какую-либо активность, вы должны сохранить дату / время этого. В следующий раз, когда пользователь захочет что-то сделать, просто сравните (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();
}
2 голосов
/ 29 апреля 2009

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

0 голосов
/ 29 апреля 2009

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

0 голосов
/ 29 апреля 2009

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

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

...