Сохранение/кэширование данных между запросами - общий подход

Python

  • __init__
  • некоторые библиотеки являются неловкими, как smtplib
  • 'сам' должен быть в объявлении метода!!!
  • (для пред3.0) несколько плохая поддержка unicode
  • отсутствие встроенной выгоды попытки
  • никакая прямая ссылка к "этому" / текущему модулю (вместо этого должны использовать sys.modules[__name__])
5
задан Robert Koritnik 12 August 2009 в 10:07
поделиться

1 ответ

Учитывая ваши требования, я полагаю, что лучшим решением будет для получения идентификатора из файла 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, но я не уверен, что это сработает, поскольку я никогда не пробовал.

4
ответ дан 15 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

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