2014-12-02 4 views
4

Я не получаю концепцию web api и session.Asp.net web api Сессия

Я создал проект asp.net web api и интегрировал в него angularjs. Каждый раз, когда я собираюсь позвонить в web api.

Я прочитал статьи, в которых утверждается, что это нехорошо использовать сеанс в Web api. Я понимаю, что веб-api - это подход без гражданства. Я согласен. У вас есть способ использовать сеанс.

Первый вопрос: если после входа в систему, я хочу показать имя пользователя на каждой странице, что мне делать с помощью подхода web api ????

второй вопрос: они говорят, что не используют сеанс в webapi. то каков другой способ/подход для безопасного хранения информации о клиенте.

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

Что и как мне сделать это для пользователя, пока приложение не работает в режиме работы?

ответ

1

Я бы порекомендовал вам избежать asp.session, поскольку это может вызвать проблемы с производительностью и can expire anytime regardless of your application state, does not scale on cloud, it will block concurrent ajax requests). Лучшим подходом было бы использовать механизм хранения HTML 5, особенно в сочетании с AngularJs (вы можете использовать ng-storage https://github.com/gsklee/ngStorage).

+0

Но если я использую sessionStorage HTML 5 и сохраняю имя пользователя в нем после входа в систему. Localstorage доступен для редактирования, поэтому я не чувствую себя в безопасности. Что с f12, если я изменю имя пользователя ??? – micronyks

+1

@micronyks Да, вы можете, но вы также можете редактировать html этой страницы таким же образом, нажав F12, но эти изменения повлияют только на ваш локальный браузер и не будут выполняться обычными пользователями. Единственное, о чем вы должны знать, это безопасная информация (например, пароли), которые не должны храниться на стороне клиента в незашифрованном состоянии. –

0

Я бы порекомендовал вам использовать идентификатор asp.net и отобразить информацию о пользователе на сервере.

+0

Вы покажете мне дорогу? – micronyks

+0

Моя идея не хранить информацию о пользователе на клиенте. Вы можете получить доступ к информации о пользователе в виде [this] (http://stackoverflow.com/questions/263486/how-to-get-current-user-in-asp-net-mvc). Также в большинстве случаев asp.net web api используется с asp.net mvc – Mikalai

+0

Я не понимаю ваш путь. Я использую чистый wab api, а не контроллер mvc. Я не знаю, как идти дальше. – micronyks

2

Здесь семантика часто затуманивает дискуссию. Люди путают объект Session с безгражданством. И часто говорят: «Не используйте сеанс, потому что он не является апатридом!».

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

Сессия или кеш-время выполнения или то, что вы используете для кеширования данных, не влияет на ваш дизайн без состояния, потому что на самом деле, что дальше? Ваша база данных тоже имеет смысл? И вы не должны читать данные? Совершенно очевидно; ваше основное хранилище, если оно находится в памяти или на диске, не отражает ваше состояние клиенту.

Хотя я чувствую, что @MajoB делает другие достоверные замечания о том, чтобы не использовать объект сеанса, на самом деле нет вреда, используя какой-то кеш в веб-api, сеансе или что-то еще. Но никогда не позволяйте факту, если что-то есть в сеансе IN, возвращают другой результат, тогда когда что-то выходит за сеанс.