Когда использовать TempData по сравнению с Сессией в ASP.NET MVC

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

60
задан scottm 30 September 2009 в 20:57
поделиться

5 ответов

TempData - это сеанс, поэтому они не совсем разные. Однако различие легко понять, потому что TempData предназначена для перенаправления, а перенаправляет только . Поэтому, когда вы устанавливаете какое-либо сообщение в TempData, а затем перенаправляете, вы правильно используете TempData.

Однако использование Session для любого вида безопасности чрезвычайно опасно. Сессия и членство полностью разделены в ASP.NET. Вы можете «украсть» сеансы у других пользователей , и да, люди действительно атакуют веб-сайты таким образом. Поэтому, если вы хотите выборочно останавливать публикацию информации в зависимости от того, вошел ли пользователь в систему, посмотрите на IsAuthenticated , и если вы хотите выборочно отображать информацию в зависимости от того, какой тип пользователя вошел в систему, вы используете Поставщик ролей . Поскольку GET можно кэшировать, единственный способ выборочного разрешения доступа к действию в GET - это атрибут AuthorizeAttribute.

Обновление В ответ на ваш отредактированный вопрос: у вас уже есть хороший пример использования TempData в вашем вопросе, а именно, возвращение простого сообщения об ошибке после неудачного POST. Что касается того, что должно храниться в сеансе (помимо «немногое»), я просто думаю о сеансе как о пользовательском кеш-памяти. Как и в случае кэша, не относящегося к конкретному пользователю, вам не следует помещать в него конфиденциальную информацию. Но это хорошее место, чтобы наклеить вещи, поиск которых относительно дорого стоит. Например, на нашем Site.Master отображается полное имя пользователя. Это хранится в базе данных, и мы не хотим делать запросы к базе данных для каждой страницы, которую мы обслуживаем.

89
ответ дан 24 November 2019 в 17:45
поделиться

"It doesn't work" isn't very descriptive, but let me offer a couple suggestions.

Under the hood, TempData uses Session to store values. So there isn't much difference in terms of storage mechanisms or anything like that. However, TempData only lasts until the next request is received.

If the user makes an ajax request in between form posts, TempData is gone. Any request whatsoever will clear TempData. So it's really only reliable when you're doing a manual redirect.

Why can't you just simply render the meeting ID to a hidden field in your View form? You're already adding it to the model. Alternately, add it to your route as a parameter.

4
ответ дан 24 November 2019 в 17:45
поделиться

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

17
ответ дан 24 November 2019 в 17:45
поделиться

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

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

0
ответ дан 24 November 2019 в 17:45
поделиться

I would suggest MvcContrib's solution: http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/

If you don't want full MvcContrib, the solution is only 1 method + 1 class that you can easily grab from MvcContrib sources.

0
ответ дан 24 November 2019 в 17:45
поделиться
Другие вопросы по тегам:

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