смешивание переменных сеанса в ASP.NET? - PullRequest
1 голос
/ 18 сентября 2008

Возможно ли ASP.NET перепутать, какой пользователь связан с какой переменной сеанса на сервере? Связаны ли переменные сеанса с исходным пользователем, создавшим их во времени, пространстве и измерении?

Ответы [ 8 ]

2 голосов
/ 18 сентября 2008

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

Сказав все, что, похоже, ваша проблема не в том, что значения сеанса перепутаны. Первое, на что я бы начал смотреть - это пул соединений. ADO объединяет соединения по умолчанию, но если вы запрашиваете соединение с именем пользователя / паролем, которого нет в пуле, это должно дать вам новое соединение. Подсказка, которая может стать узким местом для производительности в будущем, если ваш сайт очень большой. Прошло много времени с тех пор, как я работал с SQL Server, в Oracle есть вызов, который можно сделать, чтобы изменить личность пользователя. Я был бы удивлен, если бы не было аналога в SQL Server. Вы можете попытаться подключиться к вашей БД с использованием общего имени пользователя / пароля, а затем выполнить этот вызов переключателя идентификации, прежде чем вернуть соединение с остальной частью кода.

2 голосов
/ 18 сентября 2008

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

Какое поведение вы видите? И вы уверены, что в переменных, о которых вы говорите, нет статичности?

0 голосов
/ 18 сентября 2008

Я предполагаю, что вы повторно используете статическое поле в классе для хранения строки подключения. Эти статические поля повторно используются в нескольких запросах IIS, поэтому вы, вероятно, когда-либо видели только что последнего вошедшего в систему пользователя в списке «Последнее обновление выполнено».

Кстати, если у вас нет ДЕЙСТВИТЕЛЬНО веских причин для этого, вам не следует подключаться к БД, как это. Вы не позволяете себе использовать пул соединений, который может снизить производительность при высоких нагрузках.

0 голосов
/ 18 сентября 2008

Можете ли вы открыть отладчик и посмотреть, действительно ли в этой строке соединения передается правильное значение? Это быстро поможет вам определить, на чьей стороне проблема.

Также убедитесь, что ни один из кодов соединения не имеет статических свойств для соединения или пользователя, или что один пользователь может заменить свое соединение на соединение самого последнего пользователя до запуска обновления.

0 голосов
/ 18 сентября 2008

Дополнительная информация:

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

Когда таблица обновляется, мы используем 'system_user' в базе данных, чтобы идентифицировать пользователя 'последний обновленный'. Мы видим странное поведение, при котором пользователь, которого мы ожидаем увидеть в списке, неверен, и он показывает кого-то еще.

0 голосов
/ 18 сентября 2008

Это невозможно. Сессии привязаны к создателю.

Вы хотите смешаться, или у вас есть случай, когда это выглядит как смешанное?

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

пока все возможно. , , .

Нет, если только вы не сохраняете состояние сеанса на сервере sql или каком-либо другом внешнем хранилище, а затем связываетесь с ним. , .

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