2012-02-03 4 views
3

Я разрабатываю приложение asp.net. Когда я отлаживаю свое веб-приложение на локальном хосте, он принимает два разных идентификатора сеанса для двух разных окон браузера. Но когда я публикую его на сервере и открываю приложение на своем компьютере, сеанс делится со всеми окнами браузера. Я хочу, чтобы два разных пользователя вошли в два разных браузера. Является ли это возможным? Если не чем причина, она принимает два разных сеанса для моего локального хоста и один, когда я опубликовать его на серверепредотвратить общий сеанс с несколькими окнами браузера

Большое спасибо,

Ni

+0

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

+0

Извините, когда я сказал мультиплетные браузеры, я имел в виду несколько окон IF, не отличающихся браузером. Это ты имел в виду? ЕСЛИ да, чем я могу с этим поделать? Спасибо-Ni – Nirali

+3

От одного браузера, не совсем. Cookies разделены между окнами браузера, если один или несколько из окон находятся в режиме «порно» (он же icognito/приватный просмотр). –

ответ

3

Это дизайн, и нет ничего, что вы можете сделайте об этом. Вы не можете войти в тот же сайт с двумя разными учетными записями одновременно, независимо от того, используете ли вы 2 окна или 2 вкладки в одном окне (при том же браузере/поставщике).

Вам нужно будет разработать сайт специально для поддержки одновременного управления несколькими учетными записями (Google делает это, но с ограничениями). Как я вижу, это делается путем определения записи для USER и отдельных записей для ACCOUNTS, принадлежащих этому пользователю. Затем вы можете войти в систему пользователя и ЗАПРОСИТЬ на странице - какую учетную запись они хотят управлять, поддерживать это состояние - на PAGE - и иметь какой-то механизм переключения учетных записей (например, выпадающий список), чтобы они могли переключаться на учетные записи. Опять же, это будет за страницу, включая viewstate (или аналогичный механизм), и сеанс будет по-прежнему использоваться совместно.

Другой способ сделать это возможным - иметь какой-то идентификатор учетной записи в URL-адресе; например

http://mysite.com/account-1234/default.aspx 
http://mysite.com/account-5678/default.aspx 

Это позволит одному пользователю управлять несколькими учетными записями. Если вы захотите сохранить отдельные логины, вам придется авторизовать на основе идентификатора учетной записи в URL-адресе, и вам придется поддерживать отдельные файлы cookie (с разными именами файлов cookie, например «auth-1243» и «auth-5678 »), что означает, что вам нужно будет выполнить некоторую работу на уровне auth. И, опять же, сеанс будет разделен, поэтому вы не сможете хранить в нем отдельные данные учетной записи (он должен быть в коллекции «учетных записей», извлеченных на основе идентификатора из файла cookie). Запрошенный URL-адрес всегда должен совпадать с файлом cookie, иначе вы, вероятно, будете использовать cookie-путь для создания этого ограничения.

Мне лично нравится второй вариант, и я думаю, что это выполнимо; только я бы, вероятно, использовал URL-ENCODED адрес электронной почты в URL-адресе, так как это легче запомнить (хотя и длиннее) или имя пользователя (если вы управляете ими на своем сайте, поскольку они будут уникальными). +1

+0

Спасибо, Хари .. это здорово .. Только одно: почему в локальном хосте (режим отладки на моем компьютере) есть два разных сеанса для двух окон IE (не Tab)? – Nirali

+0

Является одним из тех окон IE, работающих в режиме инкогнито (Toos> InPrivate)? Если так, возможно, это было бы причиной (я не проверял это). В противном случае, я уверен, что что-то смущает вас, что вы думаете, что: браузер делится и купит OVERWRITES, когда он получает их с сайтов.Каждый файл cookie CAN (не имеет значения) должен быть привязан к PATH (кроме относящегося к DOMAIN, который его выпустил) - поэтому, если вы говорите о двух приложениях (localhost/app1 и localhost/app2) и имеете эти пути, установленные для этих файлов cookie, это объясняет это. –

+0

Возможно, обновление страницы «предыдущего» браузера, или его отладочная информация была фактором? Или, что именно заставило вас это сделать? –

0

Интересная проблема. У меня есть приложение ASP.NET. Чтобы включить несколько сеансов в разных окнах, я использую разные коллекции, хранящиеся в переменных сеанса, помеченных объявленным номером сеанса, для хранения контекста каждого окна. Немного кода, но он работает.

+1

Я бы не счел это полным ответом, но его можно было бы улучшить с помощью некоторого примера кода или псевдокода, чтобы проиллюстрировать вашу стратегию –

Смежные вопросы