Управление сессиями в ASP .NET - PullRequest
6 голосов
/ 08 августа 2011

Только что был вопрос об управлении сессиями в ASP .NET.Я рассмотрел 3 варианта в IIS (InProc, StateServer и SQL Server), и у меня возникают проблемы с развертыванием персистентности сеанса на нескольких серверах и во многих веб-приложениях.Существуют ли другие варианты управления сеансами между поддоменами (от одного и того же родителя), а также с несколькими веб-приложениями в каждом домене?

Я приведу пример: представьте себе сайт www.thisismysite.com.au.Когда я вхожу в систему, я захожу на login.thisismysite.com.au.хотя просматривая сайт, я захожу на www.thisismysite.com.au/MyWebApp/.Я пытаюсь добиться того, чтобы сеанс сохранялся во всех трех ссылках.Мне известен один сторонний инструмент, который может сделать это, Groat SessionFarm, но мне интересно, есть ли другие?Кроме того, существует сочетание SSL / не SSL, если это имеет какое-либо значение.

Примечание. Меня не беспокоит идентификация, я мог бы реализовать Windows Identity Foundation (или подобное) и отправлять заявки по всем трем местам.,Я настаиваю на сессионном постоянстве.

Спасибо огромное, Ли

РЕДАКТИРОВАТЬ: Я закончил с тем, что собирал сторонний код, который мы могли бы настроить для наших целей.Работает отлично, и при покупке исходного кода мы можем обновлять его по мере необходимости.

Ответы [ 5 ]

1 голос
/ 22 февраля 2012

State Server или хранилище в SQL Server должны нормально работать для того, что вы пытаетесь сделать - даже для нескольких приложений, но вы должны помнить, что все приложения должны иметь одинаковый MachineKey.

ASPNET-балансировки нагрузки-и-ASPNET-состояние-сервер

НТН

0 голосов
/ 05 января 2012

Один из простых способов обработки нескольких веб-приложений с использованием кэша вместо сеанса.

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

int timeout=20;
string key= userid+System.Web.HttpContext.CurrentRequest.ServerVariables("REMOTE_ADDR");

//Set 
Cache.Insert(key, value, null,  DateTime.Now.AddMinutes(timeout), Cache.NoSlidingExpiration);    

//Get
var value=Cache[key];

Во время выхода из системы не забудьте удалить кеш

Cache.Remove(key);
0 голосов
/ 08 августа 2011

Одним из вариантов является управление состоянием сеанса через SQL Server, или вы можете посмотреть что-то вроде NCache для управления состоянием на нескольких серверах.

0 голосов
/ 05 января 2012

Сервер состояний или сервер SQL должны работать.По крайней мере, для http.Возможно, запрос Https должен заканчиваться на том же IP-адресе ... Не уверен насчет этого.

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

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

Например: sessions.asp? Session_name = имя пользователя вызывается из любого локального приложения .net и отвечает «Джон», поэтому «Джон» находится внутри сессии [«session_name»] и sessions.asp (или aspx,php или что вы хотите) просто пишет текст в ответ.

Я не уверен, если это объяснено ясно ... Это грязный и простой способ сделать это.В моей компании мы используем его для около 300 одновременно работающих пользователей, каждый из которых имеет массу сессий, и, кажется, работает довольно хорошо.Надеюсь, поможет.; -)

0 голосов
/ 08 августа 2011

Похоже, что вы могли бы хотеть распределенного кэширования?

Этот пост может дать вам несколько вариантов для просмотра - Решение распределенного кэша / сеанса для ASP.NET Web App

Я немного новичок в этой области, но работаю над использованием кэширования AppFabric Microsoft Azure для состояния сеанса в моем текущем проекте MVC / ASP.NET, поскольку веб-приложения Azure по своей природе не предоставляют хороших параметров для состояния сеанса.

Я полагаю, что ссылки в вышеупомянутом посте похожи на кэширование AppFabric Azure и также могут обрабатывать состояние сеанса. Я не работал ни с одним из них, поэтому не могу ручаться за надежность. На этих выходных я тоже начинаю работать над этим аспектом.

Грег

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