5

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

Буду признателен за любые предложения по этому вопросу.

+0

Сессия блокирует одновременные запросы ajax, т. –

ответ

2

ИМО (и только мое мнение) на основании того, что я знаю о претензиях, печенье и правилах хранения:

Производительности мудрый я никогда не видела разницу между Требованиями и хранением сессии (если куки не получают большие из МНОГО ИСПРАВЛЕНИЙ), оба они кажутся примерно такими же, как и скорость (они оба должны искать данные из какого-либо места (CLaims = cookie, session = server drive storage), как для наилучшей оценки, которая будет падать строки, в которых следует хранить данные MUCH.

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

так что мое мнение о лучшей практике, если ваши хранимые данные, чтобы сохранить ваш поиск базы данных является небольшим размером, то есть на самом деле это не лучшая практика, ему просто использовать все, что угодно, но если ваше хранение много из биты, особенно строки, тогда сессия была бы лучшей практикой, на мой взгляд, поскольку она экономит данные между поездками между клиентом/сервером и не имеет ограничения по размеру, которое вы можете натолкнуть в какой-то момент, а затем вытащите свои волосы, задаваясь вопросом, почему ваши данные не являются 't там (сделал это в прошлом сам, потому что, если файл cookie слишком велик, клиент просто молча отказывается от него и занимает 3 дня, чтобы определить размер файла cookie)

4

Как вы храните данные пользователя для своего приложения, в значительной степени зависит от самого приложения. Но в качестве руководства использование аутентификации на основе утверждений и сохранение претензий в cookie сеанса является очень распространенным подходом. Посмотрите на идентификатор asp.net - http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

Вы должны иметь возможность оптимизировать данные, хранящиеся в файле cookie сеанса. Например: если ваше приложение всегда должно отображать имя пользователя на каждой странице, вы можете получить заявку на имя в файле cookie сеанса. Но если вам нужно отобразить другую пользовательскую информацию, такую ​​как адрес, компания и т. Д. ... только на одной странице «профиль пользователя», вы можете запросить эти данные в базе данных, используя запрос «nameidentifier», сохраненный в cookie сеанса. Если вы посмотрите на идентификатор ASPNET, вы увидите, что вам не нужно будет работать с cookie сеанса непосредственно в качестве промежуточного программного обеспечения для проверки подлинности cookie, чтобы убедиться, что претензии доступны через свойство User (или ClaimsPrinciple.Current) контроллера MVC. Вы должны решить, какие требования должны быть доступны для всех запросов через свойство пользователя и какие свойства пользователя должны запрашиваться через некоторую базу данных userInformation. Конечно, вы должны хранить ключ (идентификатор имени или адрес электронной почты) в базе данных userInformation в формуле изобретения, чтобы вы могли запрашивать базу данных в любое время.

+0

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

+0

Я попытаюсь объяснить немного больше. См. Обновленный ответ – rawel

+0

Я прекрасно понимаю концепцию, которую вы объясняете, хотя мне бы хотелось поблагодарить вас за отличные объяснения. Но это не та область, в которой я смущаюсь. То, что мне нужно уточнить, заключается в следующем: какая разница в сохранении этого имени пользователя как «new Claim (ClaimTypes.UserName,« username »);» и хранения его как «Session [UserName] =« имя пользователя »», учитывая передовые методы и производительность приложения? – Josh