ASP.NET MVC - Совместное использование состояния сеанса между контроллерами

Я очень не хочу сказать Вам, но я и другие можем использовать значения по умолчанию белого списка для управления нашей фильтрацией спама.

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

у меня даже есть электронная почта от меня, переходят к блоку спама потому что (1) я обычно не посылаю электронное письмо мне и (2) существуют спаммеры, которые фальсифицируют мой обратный адрес в спаме, отправленном мне.

Так для выхода из обозначения спама я должен полагать, что почта могла бы быть законной (от отправителя и подвергнуть информацию), и откройте его сначала в простом тексте (мое значение по умолчанию для всей входящей корреспонденции, спама или не), чтобы видеть, законно ли это. Моя папка для спама не будет использовать ссылок в электронных письмах, таким образом, я буду защищен от хитрых ссылок изображения и другого проступка.

, Если я хочу, чтобы будущее прибытие из того же источника перешло к моему в поле и не было отклонено для обзора спама, я определю это к своему почтовому клиенту. Для тех организаций, которые используют средства передачи массовой рассылки и уникальные адреса отправителя на почтовую часть, очень жаль. Они никогда не получают мое одобрение и всегда обнаруживаются в моей папке для спама, и если я буду занят, то я никогда не буду смотреть на них.

Наконец, если электронное письмо не является четким в простом тексте, даже когда отправлено как HTML, я, вероятно, просто удалю его, если это не будет что-то, что я знаю, представляет интерес для меня на основании источника и предыдущих ценных событий.

, Как Вы видите, это в конечном счете находится под пользовательским контролем и нет никакого автоматизированного действия, которое убедит такую систему, что Ваша почта законна от одной только своей структуры. В этом случае необходимо играть по правилам, не делайте ничего, что подобно фишингу, и облегчите для пользователей, готовых доверять почте для добавления Вас к их белому списку.

6
задан Nathan Taylor 11 August 2009 в 05:03
поделиться

2 ответа

Пара решений приходят на ум. Вы можете использовать класс «SessionState», который отображается в запрос и получает / устанавливает информацию как таковую (я делаю это из памяти, поэтому маловероятно, что это будет скомпилировано и предназначено для передачи сути):

internal class SessionState
{
  string ImageName
  {
    get { return HttpContext.Current.Session["ImageName"]; }
    set { HttpContext.Current.Session["ImageName"] = value; }
  }
}

А затем из контроллер, выполните что-то вроде:

  var sessionState = new SessionState();
  sessionState.ImageName = "xyz";
  /* Or */
  var imageName = sessionState.ImageName;

В качестве альтернативы вы можете создать метод расширения контроллера:

public static class SessionControllerExtensions
{
  public static string GetImageName(this IController controller)
  {
    return HttpContext.Current.Session["ImageName"];
  }

  public static string SetImageName(this IController controller, string imageName)
  {
    HttpContext.Current.Session["ImageName"] = imageName;
  }
}

Затем из контроллера:

  this.SetImageName("xyz");
  /* or */
  var imageName = this.GetImageName();

Это определенно СУХОЙ. Тем не менее, мне не особенно нравится ни одно из этих решений, поскольку я предпочитаю хранить как можно меньше данных, если они есть, в сеансе. Но если вы намерены сохранить всю эту информацию без необходимости загружать / различать ее из какого-либо другого источника, это самый быстрый (самый грязный) способ, который я могу придумать. Я совершенно уверен, что есть гораздо более элегантное решение, но у меня нет всей информации о том, что вы пытаетесь сделать и какова проблемная область.

Имейте в виду, что при хранении информации в во время сеанса вам придется обезвоживать / регидратировать объекты посредством сериализации, и вы, возможно, не получите той производительности, которую думаете, что делаете это таким образом.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: В ответ на дополнительную информацию Не уверен, где вы хотите это развернуть, но обработка изображений «в реальном времени» - верный способ защиты от DoS-атаки. Я предлагаю вам следующее - это при условии, что это общедоступно, и любой может загрузить изображение:

1) Разрешите пользователю загружать изображение. Это изображение попадает в очередь обработки для фоновой обработки приложением или какой-либо службой. Кроме того, имя изображения попадает в личную очередь обработки пользователя - вероятно, в таблицу в базе данных. Информацию о фоновой обработке в веб-приложении можно найти на @ Запланировать задание на размещенном веб-сервере

2) Обработать эти изображения и во время обработки отобразить «график обработки». У вас может быть запрос ajax на странице продукта, который проверяет обрабатываемые изображения и пытается перезагружать их каждые X секунд.

3) Пока изображение «обрабатывается», пользователь может отказаться от обработки, предполагая, что они тот, который загрузил изображение. Это доступно либо на странице (ах) продукта, на которой отображается изображение, либо в отдельном представлении «пользовательской очереди», что позволит им исключить изображение из рассмотрения.

Таким образом, вы получаете еще несколько объектов предметной области и те объекты управляются очередью. Я убежденный сторонник соглашения, а не конфигурации, поэтому конечный пункт назначения изображений продукта должен быть заранее определен. Примерно так:

images / products / {id} .jpg или, если коллекция, images / products / {id} / {sequence} .jpg.

Тогда вам не нужно знать место назначения в форма. Это' s одинаково для всех изображений.

Затем очереди необходимо знать, куда было загружено временное изображение и какой был идентификатор продукта. Работник очереди извлекает элементы из очереди, обрабатывает их и сохраняет их соответствующим образом.

Я знаю, что это звучит немного более «структурированно», чем вы изначально планировали, но я думаю, что это немного чище.

3
ответ дан 17 December 2019 в 07:07
поделиться

Есть ли полная эквивалентность между UploadController и ProductController?

По мере того, как файлы загружаются с помощью UploadController, данные о загрузке сохраняются в Сессии. После того, как это произойдет, мне нужно получить доступ к данным сеанса в ProductController.

Когда я прочитал, что для UploadControl требуется доступ для чтения и записи к данным выгрузки, ProductController нужно только прочитать.

Если это правда, то вы можете прояснить это, используя неизменяемую оболочку вокруг информации о загрузке, и UploadController поместит ее в сеанс.

Сам сеанс, по определению, является публичной общей доской объявлений, отделяет явные отношения за счет того, что позволяет любому получить и поместить. Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.

Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.

s true, то вы можете прояснить это, используя неизменяемую оболочку вокруг информации о загрузке и заставив UploadController поместить ее в сеанс.

Сам сеанс по определению является публичной общей доской объявлений, отделяет явные отношения за счет того, что позволяет любому получить и поместить. Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.

Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.

s true, то вы можете прояснить это, используя неизменяемую оболочку вокруг информации о загрузке и заставив UploadController поместить ее в сеанс.

Сам сеанс по определению является публичной общей доской объявлений, отделяет явные отношения за счет того, что позволяет любому получить и поместить. Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.

Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.

Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.

Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.

Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.

Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.

1
ответ дан 17 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

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