Профиль пользователя ASP.NET и использование файлов cookie

StackOverflow https://stackoverflow.com/questions/457292

  •  19-08-2019
  •  | 
  •  

Вопрос

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

Итак, каковы некоторые из самых больших преимуществ/недостатков использования профилей пользователей или файлов cookie для хранения пользовательских настроек?

Это было полезно?

Решение

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

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

Другие советы

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

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

Кроме того, я заметил, что разные браузеры имеют разные реализации для файлов cookie - например, IE теперь может получать 50 файлы cookie из одного домена (по сравнению с исходными 20), но они по-прежнему ограничены 4096 байт для всей коллекции файлов cookie (и предыдущие версии) - другие браузеры будут поддерживать 4 КБ на файл cookie, а не на домен.

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

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

Помимо того, что браузеру нельзя доверять потенциально большой объем данных (которые могут быть потеряны, неправильно сохранены или не сохранены вообще в зависимости не только от браузера, но и, скажем, от какого-либо антивирусного приложения или чего-то еще), это имеет ряд других преимуществ:

  • Вы скрываете свою реализацию от пользователя:Если вы сохраните данные в файле cookie, они будут видны всем и могут быть проанализированы или изменены по вашему желанию.Это может даже привести к тому, что пользователи изменят файлы cookie по своему вкусу и, таким образом, заставят вас хранить вещи, от которых вы, вероятно, захотите избавиться, только потому, что некоторые пользователи в любое время зависят от вашей конкретной реализации.
  • Поскольку файлы cookie хранятся в виде обычного текста на общих машинах, каждый больше не может легко увидеть все настройки, сделанные предыдущим пользователем, или изменить их по своему желанию.

Но самым важным моментом остается отключение от не совсем работающих реализаций браузера (обычным, проверенным вариантом использования является просто хранение небольших токенов).

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

Я не знаком с API профилей пользователей, но думаю, что он хранит информацию на сервере (?). Если это так, то у вас могут возникнуть проблемы, если у вас много пользователей.

В целом, возможно, лучшим решением является использование профиля пользователя, если он гарантирует постоянство информации.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top