powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Теряю объект в сессии
18 сообщений из 18, страница 1 из 1
Теряю объект в сессии
    #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
Теряю объект в сессии
    #33408626
Ahot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, ясень пень, теряться все будет :)
Можно хранить сессию в базе и будет все ОК.
...
Рейтинг: 0 / 0
Теряю объект в сессии
    #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
Теряю объект в сессии
    #33408951
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В настройках скажи сессии жить 15 минут - и все

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

???????? :)
...
Рейтинг: 0 / 0
Теряю объект в сессии
    #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
Теряю объект в сессии
    #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
Теряю объект в сессии
    #33410811
podeig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет.

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

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

???? :)
...
Рейтинг: 0 / 0
Теряю объект в сессии
    #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
Теряю объект в сессии
    #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
Теряю объект в сессии
    #33411028
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы знаете, Microsoft в MSDN документации и статьях настоятельно не рекомендует использовать InProc моду. Я думаю есть здесь проблемы (как всегда не документированные).
...
Рейтинг: 0 / 0
Теряю объект в сессии
    #33411106
Фотография nex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем ты проект на production-сервере втихую перекомпиливешь? Не хорошо :-).

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

--
nexus
...
Рейтинг: 0 / 0
Теряю объект в сессии
    #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
Теряю объект в сессии
    #33411290
podeig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nexА зачем ты проект на production-сервере втихую перекомпиливешь? Не хорошо :-).


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

:)
...
Рейтинг: 0 / 0
Теряю объект в сессии
    #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
Теряю объект в сессии
    #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
Теряю объект в сессии
    #33414488
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как я понимаю в сессии вы желаете хранить Ваш объект типа Users. Попробуйте добавить перед определением класса

[Serializable]
public class Users

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

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

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

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


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