Переменные сеансов ASP.NET между сеансами пользователей - PullRequest
0 голосов
/ 05 сентября 2018

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

Session["userId"]

Я изменил все переменные сеанса, чтобы добавить уникальное имя пользователя пользователя, когда они создаются и на них ссылаются, поэтому они:

Session["userId" + Context.Identity.User.Name.ToString()] 

Пока у меня нет сообщений о проблеме, но на самом ли деле это сработает? Есть ли простой способ защитить сессии, чтобы переменные не просачивались между пользователями? Я уверен в ASP.NET коде (особенно webforms), но столкнулся только с проблемой сеанса, поскольку все больше пользователей используют сайт. У меня нет большого контроля над настройками IIS, так как сайт создается через AWS Elastic Beanstalk, так что в основном это настройки IIS по умолчанию.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Извините, я не могу писать комментарии к вашему вопросу, но: Та же проблема возникла у разработчика Java с AWS Elastic Beanstalk: https://forums.aws.amazon.com/thread.jspa?threadID=84027 Во-первых, я предлагаю вам попытаться установить no-cache для вашего HttpResponse (временное решение), чем Я предлагаю вам попробовать поиграть с настройками прокси IIS.

Если это не помогло (и вы используете балансировщик нагрузки) - откажитесь от использования настроек inproc, как в этом разделе: Пользователь в неправильном сеансе

PS. Вам действительно не нужно различать имена переменных сеанса - уникальность сеанса гарантируется тем, что ASP.NET устанавливает разные Session_ID для каждого сеанса.

0 голосов
/ 05 сентября 2018

Это должно работать нормально, но я предлагаю хранить имя пользователя или информацию о профиле пользователя в файлах cookie или локальном хранилище, поскольку, как вы упомянули, когда множество пользователей, вошедших в систему, поддерживает для них сеанс в памяти сервера (я считаю, что сеанс по умолчанию находится в памяти не in-proc или redis). Это не масштабируется, как если бы управление сеансом заняло бы миллионы пользователей, вошедших в систему или создающих нагрузочный тестовый сервер. Однако несколько сотен пользователей не сильно нагружены.

Вы можете хранить информацию в браузере пользователя, используя sessionStorage, например:

Значение настройки

sessionStorage.setItem("user_name", "test");

Получение значения

var userName = sessionStorage.getItem("user_name");

Может хранить объект javascript или json.

Файлы cookie - это старый способ хранения информации на стороне пользователя:

Создание куки

document.userCookie = "username=John Doe";

чтение куки

document.userCookie //"username=John Doe"

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

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