Подтвердить что ты не робот

TempData: это безопасно?

Я использую TempData, чтобы сохранить мою модель при использовании RedirectToAction. Он отлично работает, но я чувствую, что это может быть неправильным. Я действительно стараюсь избегать использования данных сеанса, и я прочитал, что TempData использует сеанс. Безопасно ли использовать? Существуют ли проблемы, которые могут возникнуть при использовании его в сбалансированной нагрузке среде?

Вопрос о мелочах: ​​ "Это безопасно?" - назовите фильм.

4b9b3361

Ответ 1

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

TempData является де-факто выбором при использовании шаблона PRG и для чего он предназначен.

Что касается того, правильно ли это делать... это зависит от вашего варианта использования!

PS Марафон.

Ответ 2

Хорошо, я бы сказал, что это зависит. Если вы обрабатываете множество трафика с помощью балансировщика нагрузки и нескольких серверов переднего плана, то объекты сеанса следует избегать, поскольку это может ухудшить производительность и затруднить масштабирование по горизонтали (запрос фермы не всегда приходит на тот же веб-сервер).

TempData недолговечна, и если вы не ставите туда много объектов и дважды думайте обо всей архитектуре, я думаю, что тогда это безопасно. Там много сайтов, которые используют его широко и не имеют проблем с ним (я работал на общих и выделенных хостинговых сайтах, до 50 - 70 тыс. Посетителей в день, которые используют сеанс, часто с сетью и db на том же сервере).

Ответ 3

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

Кроме того, я также предлагаю вам оценить, можете ли вы использовать View вместо RedirectToAction. Это:

TempData["model"] = model;
return RedirectToAction("SomeAction");

Можно заменить на:

return View("SomeAction", model);

Конечно, предполагая, что "SomeAction" - это допустимое представление, доступное из текущего контроллера (это либо представление в том же ctrl, либо одно из разделенных в Shared) и что это не просто промежуточное действие, перенаправляемое на другое.

Ответ 4

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

Вопрос о том, следует ли использовать tempdata или нет, это совсем другой вопрос. Я бы сказал, что, как правило, это происходит вокруг. Если вы пытаетесь избежать попадания в базу данных, чтобы перезагрузить объект, который уже загрузил одно действие, используйте вместо этого кеш.

Ответ 5

Я ограничил использование TempData для передачи сообщения проверки модели объекта между представлениями и действиями. Я не рассматривал использование Tempdata с точки зрения безопасности, но после того, как SO-поток обсудит то же самое: HttpContext.Items с ASP.NET MVC. См. Последние комментарии к потоку и связанные с ними обсуждения.