2014-12-02 1 views
4

Я немного запутался в управлении сеансами в MVC4.Как работает сессия в MVC?

Допустим, я ввел имя пользователя и пароль и нажал кнопку входа. Затем на стороне сервера я получил SessionId из HttpContext.Current.Session. И затем я проверяю учетные данные пользователя против базы данных. Если пользователь действителен, добавьте SessionId, userName и uiserId в сеанс.

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

Теперь я следующие вопросы:

  1. Как сервер пришел узнать, что запрос, пришел из того же браузера и с той же машине?
  2. Я обнаружил, что SessionId отличается для разных браузеров, но он одинаковый для одного и того же браузера на другой машине, поэтому, если я вошел в систему с machine1 и с google chrome, можно ли использовать тот же сеанс для другого браузера? (Означает сеанс будет доступен для разных машин с одинаковым браузером. Возможно ли это?)
  3. Как сервер понимает этот запрос для того же пользователя, который вошел в систему?
  4. В сеансе asp.net поддерживается viewState, но состояние представления не используется в MVC, то что используется в MVC?
+0

Я попытаюсь ответить на ваш конкретный вопрос, когда найду больше времени, но я думаю, что этот URL-адрес поможет вам устранить некоторые сомнения. https://gregorybeamer.wordpress.com/2012/11/04/session-and-cookies-in-asp-net-mvc-oh-my/ – SBirthare

+0

Хорошо, спасибо, я просмотрю этот URL-адрес – Ashok

+0

Сессия никогда не поддерживается «ViewState, они являются полностью отдельными механизмами. ViewState хранится в скрытом поле на странице, данные сеанса никогда не отправляются в браузер. –

ответ

4

Сначала я предлагаю прочитать this Wikipedia article о сеансах HTTP. Ответы на ваш вопрос:

  1. С каждым запросом клиент отправляет SessionId либо кук или строку запроса.
  2. Это должно быть невозможно по умолчанию. Но это может быть сделано session hijacking.
  3. Сервер считывает SessionId, который был отправлен клиентом в вопросе 1. Сервер поддерживает, например, объект данных значения ключа, чтобы он мог загружать правильные данные для данного SessionId.
  4. ASP MVC не использует viewstate, поскольку это совершенно другой подход, чем ASP.NET. См. this question для получения дополнительной информации.
+0

Спасибо за ваш ответ. Я понял, что вы хотите сказать. Пожалуйста, проверьте следующие комментарии: Значит, мне не нужно ничего делать, чтобы поддерживать сеанс пользователя. Я просто добавлю имя пользователя и его sessionId в сеансе HttpContext. Сервер будет принимать значение cookie и получит связанный с ним сеанс и имя пользователя и пользователя. Это правильно? Кроме того, мы получаем тот же sessionId для того же браузера с разных компьютеров. Но вы говорите, что захват сеанса происходит только так. Так как это происходит? – Ashok

+1

Да, ASP MVC обрабатывает сеанс из коробки, если вы не измените что-то в конфигурации. Если вы хотите аутентифицировать пользователей, ознакомьтесь с проверкой подлинности форм: http://msdn.microsoft.com/en-us/library/ff398049(v=vs.98).aspx Что именно вы подразумеваете под тем же «SessionId»? Это означает, что значение в cookie одинаково на обеих машинах. Не могли бы вы проверить это поведение в своем приложении, поместив что-то в сеанс на машине 1 и прочитав его на машине 2? – Marthijn

+0

Спасибо за ваш ответ. Хорошо, я сделаю это. SessionId означает, что sessionId получен от браузера – Ashok