Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с длительными сессиями

337
21 сентября 2006 года
shine
719 / / 09.06.2006
Кто нибудь может подсказать как организовать очень длительную сессию в .NET (1.1)?

Проблема в том что несмотря на выставленный таймаут(sessionState.timeout) в 200 минут данные сессии теряются после 40-50 минуты. Можно ли их как-то хранить более надежно?
13K
23 сентября 2006 года
V.V.V.
59 / / 21.07.2006
Сессию чего?
337
24 сентября 2006 года
shine
719 / / 09.06.2006
[QUOTE=V.V.V.]Сессию чего?[/QUOTE]

Если создать вот такую переменную в сессии:
Session("LastName") = "LastName"

то через некоторое время(>40мин) она обнуляется. Как этого избежать?
273
24 сентября 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=shine]Если создать вот такую переменную в сессии:
Session("LastName") = "LastName"

то через некоторое время(>40мин) она обнуляется. Как этого избежать?[/quote]
Она обнуляется скорее всего из-за сборки мусора, т.к. скорее всего на переменную сессии (а не саму сессию!!!) LastName нет активных ссылок. Самый простой вариант, создать переменную, которая будет жить в течении всей сессии - а это только статические переменные и назначит ей значение LastName.
337
24 сентября 2006 года
shine
719 / / 09.06.2006
[QUOTE=3A3-968M]Она обнуляется скорее всего из-за сборки мусора, т.к. скорее всего на переменную сессии (а не саму сессию!!!) LastName нет активных ссылок. Самый простой вариант, создать переменную, которая будет жить в течении всей сессии - а это только статические переменные и назначит ей значение LastName.[/QUOTE]

Идея хорошая, но как это будет работать с несколькими одновременными сессиями? Я имею ввиду, что если я создам какой-то класс со статическими членами и буду хранить в этих членах нужные мне значения, то эти значения будут общими для всех сессий.

Может быть можно как-то перенастроить параметры сборки мусора?
273
24 сентября 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=shine]Идея хорошая, но как это будет работать с несколькими одновременными сессиями? Я имею ввиду, что если я создам какой-то класс со статическими членами и буду хранить в этих членах нужные мне значения, то эти значения будут общими для всех сессий.

Может быть можно как-то перенастроить параметры сборки мусора?[/quote]
Для каждого удалённого пользователя создаётся отдельный домен приложения (AppDomain) и в него загружается код. Так что теоретически даже статическая переменная для каждого пользователя будет своя. Проверить это можно практически и много времени не займёт.
337
24 сентября 2006 года
shine
719 / / 09.06.2006
[QUOTE=3A3-968M]Проверить это можно практически и много времени не займёт.[/QUOTE]

Проверил. Не работает. Код действительно элементарный:
Код:
private void Page_Load(object sender, System.EventArgs e)
        {
            if(PersonalStorage.var1 != null)
            {
                Label1.Text = PersonalStorage.var1;
            }
        }

        private void Button1_Click(object sender, System.EventArgs e)
        {
            PersonalStorage.var1 = Session.SessionID;
        }


Эта штука была запущена в трех разных браузерах(IE, Opera, FF). После клика на кнопку в одном браузере SessionID заносится в статическую переменную.
Если обновляю(не сабмичу) другие два браузера, то вижу значение этого SessionID. Получается, что статическая переменная общая. :(
337
07 октября 2006 года
shine
719 / / 09.06.2006
Господа форумчане!
Проблема до сих пор осталась нерешенной. Я попытаюсь сформулировать по другому варианты ее решения.

1) Можно ли создать статический объект в С# который будет уникален для каждого домена приложения?
2) Можно ли так настроить работу сессии и/или сборщика мусора, чтобы сессионные переменные не подвергались чистке во время работы приложения?

У кого-нибудь есть какие-то мысли как это можно реализовать?
422
07 октября 2006 года
Dimarik
181 / / 12.02.2005
А если создать класс, у которого статическое свойство будет, например, типа HashTable, в котором ключом будет являться идентификатор сессии, а значением как раз эта переменная.
337
07 октября 2006 года
shine
719 / / 09.06.2006
[QUOTE=Dimarik]А если создать класс, у которого статическое свойство будет, например, типа HashTable, в котором ключом будет являться идентификатор сессии, а значением как раз эта переменная.[/QUOTE]

Это то что нужно. Спасибо.
273
08 октября 2006 года
3A3-968M
1.2K / / 22.12.2005
Можно попробовать создать instance-поле в классе, который инкапсулирует все контролы (вроде бы производный от Page).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог