Использование сеанса Stateserver в веб-ферме ASP.NET

Я создал сайт онлайн-шоппинга, который будет развернут на веб-ферме. В результате я решил использовать систему управления сессиями Stateserver, предоставляемую ASP.NET. Теперь у меня есть страница входа. После успешного входа пользователя я перенаправляю его на страницу каталога, где он может впоследствии добавить книги в свою корзину.

Из того, что я понял, сессия хранится в форме пары ключ-значение. Итак, если я создаю сеанс для конкретного пользователя (скажем, его зовут "abc"), я бы сделал что-то вроде этого:

Session["abc"]=tmp; //where tmp is a "List" of items that "abc" has added to the cart

Теперь, после того как он перенаправлен на другую страницу, как мне получить этот сеанс? Из того, что я прочитал, я должен был написать:

temp=Session["abc"] 

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

Я не думаю, что я понял точную работу идентификатора сессии, поэтому, если кто-то может мне помочь с этим, было бы здорово.

2 ответа

Решение

Как отправить это имя пользователя на другую страницу в качестве параметра.

Вам не нужно отправлять это. Объект Session не является частью ответа страницы, он живет на стороне сервера. Следовательно, вы можете установить его на странице A и получить его на странице B, используя тот же код, который вы указали:

Session["abc"]=tmp;

А также

temp=Session["abc"] 

Поэтому, если я создам сеанс для всех из них с соответствующими именами пользователей в качестве ключей, как я могу получить их сеансы, когда они просматривают разные страницы?

Вы можете получить его тем же ключом, который вы использовали для хранения объекта в сеансе. На самом деле вы можете использовать один и тот же ключ для всех пользователей. Например:

username=Session["username"] 

Примечание..Net извлекает нужный экземпляр для каждого объекта, используя уникальный идентификатор, который назначается каждому пользователю (SessionId пользователя). Это, однако, прозрачно для вашего кода.

В этом вопросе перечислено несколько ошибок при использовании StateServer Session

Если вы не используете липкие сеансы (имеется в виду, что после создания сеанса ваш балансировщик нагрузки будет поддерживать запрос всегда в одном и том же окне), вам необходимо убедиться, что в вашем файле web.config поставщик состояния OutOfProc настроен так, чтобы он указывал на IP-адрес сервера, на котором работает служба состояний ASP.NET - по умолчанию он указывает на localhost-

Кроме того, вам нужно убедиться, что все, что вы помещаете в Session, является Serializable (т.е. украшает ваши классы атрибутом [Serializable])

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

Другие вопросы по тегам