Python
__init__
sys.modules[__name__]
) Учитывая ваши требования, я полагаю, что лучшим решением будет для получения идентификатора из файла cookie и использования его для индексации в Http Cache (HttpContext.Current.Cache).
Если вы хотите сохранить способ доступа пользователей к нему, заключите кэш в объект «UserCache». Объект может быть создан с помощью HttpModule и сохранен как синглтон (подождите ...) внутри самого кеша или, что еще лучше, просто сконструирован при необходимости для извлечения из кеша http. Это будет зависеть от того, где вам нужно получить к нему доступ, и от того, доступен ли HttpContext.Current.Cache напрямую. Ниже представлена ленивая реализация
. Опять же, это сделано для ясности, а я бы не реализовал ее на самом деле.
public class UserCache
{
public IUser GetUser(object userKey)
{
return HttpContext.Current.Cache[userKey];
}
public void AddUser(object userKey, IUser user)
{
/* this could pull the key from the user object as well. */
HttpContext.Current.Cache.Add(/* add the object with key and a sliding expiration that is slightly greater than session timeout */);
}
public void ExpireUser(object userKey)
{
HttpContext.Current.Cache.Remove(userKey);
}
/* If you don't want to do SQL cache dependency */
public void UpdateUser(object userKey, IUser user)
{
HttpContext.Current.Cache.Insert(/* ... */);
}
}
Используя механизмы кэширования по умолчанию (или, еще лучше, механизм кэширования, предоставляемый DI, чтобы вы не были привязаны к реализации), вы можете установить срок действия для автоматического удаления пользователей из кеша, как указано в комментарии. Вы можете настроить кэш, чтобы он зависел от обновлений SQL-сервера, а также для обработки обновлений или вручную обновлял его как часть службы для сохранения изменений.
Дополнительная информация о кэше по умолчанию доступна здесь . Дополнительная информация о зависимостях кэша доступна здесь .
В самом HttpModule, я полагаю, вы могли бы сделать некоторую магию в событии EndRequest, чтобы увидеть, аутентифицирован ли запрос, а затем зарегистрировать пользователь на основе файла cookie, но я не уверен, что это сработает, поскольку я никогда не пробовал.