Вам не нужен 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();
}