Сессия против Cookie против Custom IPrincipal - PullRequest
4 голосов
/ 05 февраля 2010

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

Большое спасибо

Мэтт

UPDATE:

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

Ответы [ 3 ]

2 голосов
/ 05 февраля 2010

Проверка подлинности с помощью форм (на основе файлов cookie) должна быть достаточной. Здесь вы можете прочитать об использовании FormsAuthentication с пользовательским IPrincipal:

Аутентификация с помощью ASP.NET 2.0 Forms - настраиваемая, но простая

Эта страница о том, как работает аутентификация форм:

Объяснено: Аутентификация с помощью форм в ASP.NET 2.0

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

1 голос
/ 06 февраля 2010

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

Любой, у кого есть такая же проблема, может найти больше информации здесь:

http://www.asp.net/learn/security/tutorial-03-cs.aspx (см. Шаг 4)

0 голосов
/ 05 февраля 2010

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

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

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

  3. Значение cookie не будет безопасным , его можно изменить. Значение сеанса будет защищено.

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

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

Если я прочитал это неправильно, и вы просто хотите показать / скрыть ссылку в зависимости от того, авторизован пользователь или нет, вы можете просто использовать

<% if (User.Identity.IsAuthenticated) { %>
  <a href="/MyPage">view my page</a>
<% } %>

И ваше действие MyPage в вашем контроллере отображает выделенную страницу для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...