Хранить пользовательские данные в MVC 2

#.net #sql-server #asp.net-mvc-2 #session #caching

#.net #sql-сервер #asp.net-mvc-2 #сессия #кэширование

Вопрос:

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

Например, они заходят на мою страницу, и я получаю их местоположение с помощью javascript / Google maps. Должен ли я хранить это в сеансе? Я также получаю их IP-адрес через javascript. Должен ли я просто выполнять запрос javascript каждый раз, когда мне нужно его использовать, или я должен также сохранять это в сеансе?

Кэширование лучше, чем хранение данных в сеансе? Должен ли я поместить все это в a model , поместить model в кэш, а затем использовать a Guid для удаления нужных данных model для нужного пользователя в кэше? Стало бы это безумно дорого, если бы на странице одновременно находились тысячи пользователей?

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

Я просто никогда раньше не сталкивался с этим материалом в MVC, поэтому я мог бы воспользоваться небольшим руководством.

Спасибо, ребята.

Ответ №1:

Если вы хотите сохранить некоторые пользовательские данные в ходе посещения пользователя, вы можете использовать ASP.NET сеанс, файлы cookie или какой-либо другой более постоянный носитель, такой как база данных. Обычно я храню пользовательские данные в виде объектов, которые сериализуются в json, шифруются и записываются в файл cookie. Это позволяет мне сохранять данные при нескольких посещениях, даже если они уходят и возвращаются.

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

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

В идеале вы хотели бы рассчитать это, чтобы определить, какой будет стоимость.

Комментарии:

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

2. Если данных мало, и вы не хотите, чтобы они были на сервере, вы можете поместить их в сеансовые файлы cookie, которые удаляются клиентом при закрытии браузера. Предостережение заключается в том, что каждый записанный вами файл cookie должен отправляться обратно с каждым запросом и может увеличить задержку на стороне клиента.