Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Теряю объект в сессии / 18 сообщений из 18, страница 1 из 1
30.11.2005, 14:25
    #33408590
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Буду краток: :)

Использую куки-сессии, где храню объект user, который хранит инфо об юзере.
Все работает до тех пор, пока я не cделаю Re/Build Solution. Т.е. если я зашел на сайт как юзер, сессия активируется Session["currentUser"] = user;, пользую сайт, потом делаю build solution или меняю dll, и меня как пользувателя выбрасывает на страницу, где сообщается что сессия потеряна.

Проверяю я это так:
if ( (Users)Session["currentUser"] == null)
{
Response.Redirect( AppUrl + "missed_session.aspx" );
}
else
{
user = (Users)Session["currentUser"];
}

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

Буду очень благодарен за помощь!!! :)
...
Рейтинг: 0 / 0
30.11.2005, 14:37
    #33408626
Ahot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Ну, ясень пень, теряться все будет :)
Можно хранить сессию в базе и будет все ОК.
...
Рейтинг: 0 / 0
30.11.2005, 15:06
    #33408730
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Получается так оно и должно работать?

Ок. Я сделал так:

if ( (Users)Session["currentUser"] == null)
{
//Здесь восстанавливается юзер из базы, если найдена такая же сессия
user = Users.Restore(Session.SessionID, oConn);
if (user!=null)
Session["currentUser"] = user;
else
Response.Redirect( AppUrl + "login.aspx" );
}
else
{
user = (Users)Session["currentUser"];
}

Но тогда вопрос, как ограничить время сессии, если юзер не был активен 15 мин. для примера? Сделать функцию которая пишет в базу время обращения к странице? А затем в Users.Restore(Session.SessionID, oConn); проверять сколько времени прошло с последнего обращения?

Спасибо :)
...
Рейтинг: 0 / 0
30.11.2005, 15:59
    #33408951
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
В настройках скажи сессии жить 15 минут - и все

-- Tygra's --
...
Рейтинг: 0 / 0
01.12.2005, 12:03
    #33410653
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Это я пробовал, поставил на три минуты, жду... обновляю страницу... но сессия востанавливается, Session.SessionID походу остается такой же даже по истачении 3 минут. Смотрите код выше, как я востанавливаю объект user при его потере...

???????? :)
...
Рейтинг: 0 / 0
01.12.2005, 12:06
    #33410662
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Вот кстати полный sessionState

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="3"
/>
...
Рейтинг: 0 / 0
01.12.2005, 12:31
    #33410739
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
<configuration>
<system.web>
<sessionState>

<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"/>

У Вас указан mode="InProc".

Сделайте mode="StateServer" или mode="SQLServer". Правда, для этого нужны дополнительные шаги.
...
Рейтинг: 0 / 0
01.12.2005, 12:52
    #33410811
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Спасибо за совет.

Я так понял что это поможет решить проблему исчезнавения объекта из сессии. Попробовал запустить "net start aspstate" но получаю "The service name is invalid". Где найти правилное имя сервиса?

Но допустим я использую "Inproc" режим и тот алгоритм, который описал выше. Это всетаки даст преимущество в производительности. Я не пойму, почему по истечении timeout Session.SessionID остается тем же, я думал что значение должно теряться или изменяться. Тогда у меня не получается отследить что сессия умерла и я восстанавливяю незаслуженно юзера снова, в итоге он живет вечно.

???? :)
...
Рейтинг: 0 / 0
01.12.2005, 13:36
    #33410990
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
To use StateServer mode

Make sure ASP.NET state service is running on the remote server that will store session state information. This service is installed with ASP.NET and is located by default at < Drive>:\systemroot\Microsoft.NET\Framework\version\aspnet_state.exe .
In the application's Web.config file, set mode=StateServer and set the stateConnectionString attribute. For example, stateConnectionString="tcpip=dataserver:42424".

Среда ASP .NET отслеживает любые изменения в катологе Вашего приложения. При InProc моде сессия сохраняется в рамках процесса, в котором выполняется Ваше приложение. Когда происходит какое либо изменение в каталоге, например, изменяется web.config или dll, процесс перегружается и сессия теряется ( все это, конечно, на пальцах, но общее представление дает )
...
Рейтинг: 0 / 0
01.12.2005, 13:37
    #33411002
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
ИЗВИНИТЕ:

To use StateServer mode

Make sure ASP.NET state service is running on the remote server that will store session state information. This service is installed with ASP.NET and is located by default at <Drive>:\systemroot\Microsoft.NET\Framework\version\aspnet_state.exe.
In the application's Web.config file, set mode=StateServer and set the stateConnectionString attribute. For example, stateConnectionString="tcpip=dataserver:42424".

Среда ASP .NET отслеживает любые изменения в катологе Вашего приложения. При InProc моде сессия сохраняется в рамках процесса, в котором выполняется Ваше приложение. Когда происходит какое либо изменение в каталоге, например, изменяется web.config или dll, процесс перегружается и сессия теряется ( все это, конечно, на пальцах, но общее представление дает )
...
Рейтинг: 0 / 0
01.12.2005, 13:43
    #33411028
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Вы знаете, Microsoft в MSDN документации и статьях настоятельно не рекомендует использовать InProc моду. Я думаю есть здесь проблемы (как всегда не документированные).
...
Рейтинг: 0 / 0
01.12.2005, 13:56
    #33411106
nex
nex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
А зачем ты проект на production-сервере втихую перекомпиливешь? Не хорошо :-).

ПС.: У меня есть конструкция, котороя отлавливает неактивных пользоватей и выгоняет их. Писал для одного проекта... если нужно, заходи :).

--
nexus
...
Рейтинг: 0 / 0
01.12.2005, 14:39
    #33411285
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Valery Shiskin
In the application's Web.config file, set mode=StateServer and set the stateConnectionString attribute. For example, stateConnectionString="tcpip=dataserver:42424".


Это я сделал, но надо еще запустить в коммандной строке: net start aspstate, на что я получаю ошибку, описанную выше.

Вот здесь описано: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp12282000.asp , но у меня не получилось включить StateServer режим. :-/
...
Рейтинг: 0 / 0
01.12.2005, 14:41
    #33411290
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
nexА зачем ты проект на production-сервере втихую перекомпиливешь? Не хорошо :-).


Перекомпелирую я у себя когда тестирую, а на продакшин я буду dll менять, из за чего все в сессии и пропадает если InProc установлен.

:)
...
Рейтинг: 0 / 0
02.12.2005, 17:08
    #33414399
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
У меня в Web.config

<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>

Для запуска службы ( Win XP ):
Правой клавишей "Мой компьтер" выбираю пункт меню "Службы" в окне "Управление компьютером" сначала узел "Службы и приложения" , затем "Службы". На панели справа нахожу ASP .NET StateService и запускаю его. Все начинает работать.
...
Рейтинг: 0 / 0
02.12.2005, 17:18
    #33414426
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Сервис включил, спасибо!

Поменял в Web.config на StateServer, и получил вот такую ошибку: "Unable to serialize the session state. Please note that non-serializable objects or MarshalByRef objects are not permitted when session state mode is 'StateServer' or 'SQLServer'."


В чем тут проблема???? Что такое non-serializable objects????
...
Рейтинг: 0 / 0
02.12.2005, 17:38
    #33414488
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
как я понимаю в сессии вы желаете хранить Ваш объект типа Users. Попробуйте добавить перед определением класса

[Serializable]
public class Users

Это вполне может сработать. Если нет, то Вам надо разобраться с сериализацией, поскольку очень часто и не только в связи с сессией Вам придется с этим сталкиваться.

На пальцах: Сериализация - это процесс представления экземпляра объекта
в виде пригодном для хранения (или передачи по каналам связи) его, например, в файле или в базе данных, а также возможность выполнить создание экземпляра объекта из упомянутого представления.
...
Рейтинг: 0 / 0
04.12.2005, 16:16
    #33415899
podeig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряю объект в сессии
Все получилось Валерий!

Большое спасибо за помощь, после [Serializable] все заработало. Inproc работал очень нестабильно, теперь вроде сессии держаться хорошо. Потом как-нибудь попробую хранить сессии в базах.

Всего наилучшего!!! :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Теряю объект в сессии / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]