2013-03-19 4 views
0

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

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

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

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

temp=Session["abc"] 

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

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

ответ

0

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

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

Session["abc"]=tmp; 

И

temp=Session["abc"] 

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

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

username=Session["username"] 

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

This question спискам несколько моментов при использовании StateServer сессии

+0

Большое спасибо ... Последнее «примечание» мне очень помогло. Теперь я попытаюсь реализовать это. :) –

1

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

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

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