Идентификатор сеанса MVC5 без cookie не аутентифицирован в другом браузере, почему? - PullRequest
0 голосов
/ 25 октября 2018

Я создал новую веб-страницу MVC5, используя cookieless в web.config.Я использую ASP Identity для входа в приложение через форму входа по умолчанию для шаблона.

Мой URL выглядит так:

http://localhost:48839/(S(wjz4mdav4ue0osbywkol0zuv))/Home/

Я вошел в систему с помощью Chrome.Копирование URL-адреса в Edge или Firefox, к моему удивлению, не вошло в систему. Я не вижу своего имени пользователя и т. Д. *

Request.IsAuthenticated - это false в Edge и Firefox.

Как MVC аутентифицирует пользователя?Использует ли он строку агента пользователя браузера?

Я помню, как делал это пару лет назад (может быть, MVC3?), Это сработало.

Редактировать: это запись в моем web.config:

<sessionState cookieless="true" />

Я также заметил, что использование режима инкогнито в Chrome ведет себя так же.

1 Ответ

0 голосов
/ 01 ноября 2018

С MSDN :

Состояние сеанса ASP.NET идентифицирует запросы от того же браузера в течение ограниченного промежутка времени, что и сеанс, и предоставляет способ сохранения значений переменных дляпродолжительность этого сеанса.

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

Существует еще одна вещь, которая создает сессионные идентификаторы с истекшим сроком действия:

По умолчанию значения идентификаторов сеансов, которые используются в сеансах без файлов cookie, перерабатываются.То есть, если запрос сделан с идентификатором сеанса, срок действия которого истек, новый сеанс запускается с использованием значения SessionID, которое предоставляется с запросом.Это может привести к непреднамеренному совместному использованию сеанса, когда ссылка, содержащая значение SessionID без cookie, используется несколькими браузерами.(Это может произойти, если ссылка передается через поисковую систему, через сообщение электронной почты или другую программу.) Вы можете уменьшить вероятность совместного использования данных сеанса, настроив приложение, чтобы оно не перезапускало идентификаторы сеанса.Чтобы сделать это, присвойте атрибутуraterateExpiredSessionId элемента конфигурации sessionState значение true.Это создает новый идентификатор сеанса, когда выполняется запрос сеанса без файлов cookie с идентификатором сеанса с истекшим сроком действия.

Вы можете попробовать установить для regenerateExpiredSessionId значение false, принимая во внимание возможные недостатки.

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