x11 Posted December 22, 2021 Share Posted December 22, 2021 Загрузил на сервер очередную новую версию EXE-файла (имеется ввиду через кнопку "Upload new version" HyperServer`а). Реально к серверу подключено сейчас 3 устройства. При нажатии на кнопку в браузере "Обновить страницу" подключение происходит к каким-то старым версиям. Но не к новым. Т.е. HyperServer подключает меня к старой версии, к 101, к 103, но не к 106. Такое впечатление, что после того, как я закрыл браузер или вкладку, или просто нажал кнопку "Обновить страницу" в браузере, старая сессия НЕ завершается. Получается, что сервер (ServerModule) не уничтожает уже ненужный MainModule, к которому никто более не подключен. Добавлю еще, что у меня есть код для автоматического продления сессии: procedure TUniMainModule.UniGUIMainModuleSessionTimeout(ASession: TObject; var ExtendTimeOut: Integer); begin if not AllowTerminate then ExtendTimeOut := UniServerModule.SessionTimeout;// продлеваем сессию end; Как быть в таких случаях? Отключить автопродление сессии? Quote Link to comment Share on other sites More sharing options...
MSMK Posted December 23, 2021 Share Posted December 23, 2021 21 hours ago, x11 said: Загрузил на сервер очередную новую версию EXE-файла (имеется ввиду через кнопку "Upload new version" HyperServer`а). Реально к серверу подключено сейчас 3 устройства. При нажатии на кнопку в браузере "Обновить страницу" подключение происходит к каким-то старым версиям. Но не к новым. Т.е. HyperServer подключает меня к старой версии, к 101, к 103, но не к 106. Такое впечатление, что после того, как я закрыл браузер или вкладку, или просто нажал кнопку "Обновить страницу" в браузере, старая сессия НЕ завершается. Получается, что сервер (ServerModule) не уничтожает уже ненужный MainModule, к которому никто более не подключен. Добавлю еще, что у меня есть код для автоматического продления сессии: procedure TUniMainModule.UniGUIMainModuleSessionTimeout(ASession: TObject; var ExtendTimeOut: Integer); begin if not AllowTerminate then ExtendTimeOut := UniServerModule.SessionTimeout;// продлеваем сессию end; Как быть в таких случаях? Отключить автопродление сессии? Привет! Бывает на сервере не все ноды уничтожаются в памяти. Надо будет вручную останавливать иис и руками прям с диспетчера удалять процессы. Потом заливать ехе в папку директория с проектом и запускать иис Quote Link to comment Share on other sites More sharing options...
x11 Posted December 23, 2021 Author Share Posted December 23, 2021 я не использую IIS Quote Link to comment Share on other sites More sharing options...
zilav Posted December 24, 2021 Share Posted December 24, 2021 у тебя какой-то запредельный Idle time, часть сессий вон неделю в неактивности болтается Quote Link to comment Share on other sites More sharing options...
x11 Posted December 24, 2021 Author Share Posted December 24, 2021 Так это потому что сервер не уничтожает сессию, наверно. Т.е. пользователь уже закрыл браузер, а uniMainModule не был уничтожен почему-то. Quote Link to comment Share on other sites More sharing options...
zilav Posted December 24, 2021 Share Posted December 24, 2021 отключи свое автопродление сессий, оно у тебя я так понимаю до бесконечности продлевать ее будет Quote Link to comment Share on other sites More sharing options...
x11 Posted December 28, 2021 Author Share Posted December 28, 2021 а если хочется, чтобы сессия была "вечной", но только пока пользователь залогинен? Quote Link to comment Share on other sites More sharing options...
Tokay Posted December 28, 2021 Share Posted December 28, 2021 Я так понимаю, что гиперсервер работает по сессиям а не по логинам. То есть пока сессия явно не завершится, то он считает что пользователь всё еще подключен к ноде и перебрасывать не другую его не стоит. Впрочем это легко проверить. Достаточно глянуть на куки сессии, там виден идентификтор. Quote Link to comment Share on other sites More sharing options...
Tokay Posted December 28, 2021 Share Posted December 28, 2021 On 12/24/2021 at 10:06 AM, x11 said: Так это потому что сервер не уничтожает сессию, наверно. Т.е. пользователь уже закрыл браузер, а uniMainModule не был уничтожен почему-то. ты это можешь легко проверить. достаточно поставить бряк на разрушении mainmodule. думается пока сессия активная, то гиперсервер её никак не переключит в принципе Quote Link to comment Share on other sites More sharing options...
x11 Posted December 28, 2021 Author Share Posted December 28, 2021 4 minutes ago, Tokay said: достаточно поставить бряк на разрушении mainmodule. я ставил две точки останова: на создании и на уничтожении, так вот, старый главный модуль данных разрушается только при следующем логине, т.е. сперва создается новый экземпляр главного модуля, а потом срабатывает событие уничтожения старого модуля Quote Link to comment Share on other sites More sharing options...
Tokay Posted December 28, 2021 Share Posted December 28, 2021 7 minutes ago, x11 said: я ставил две точки останова: на создании и на уничтожении, так вот, старый главный модуль данных разрушается только при следующем логине, т.е. сперва создается новый экземпляр главного модуля, а потом срабатывает событие уничтожения старого модуля как я понимаю, новый модуль и сессия должна подключатся уже к новой ноде. впрочем, лучше саппорт пусть ответит. Quote Link to comment Share on other sites More sharing options...
x11 Posted December 28, 2021 Author Share Posted December 28, 2021 В общем, я добавил код, понаблюдаю. procedure TUniMainModule.UniGUIMainModuleBrowserClose(Sender: TObject); begin UniSession.Log('End session. UniGUIMainModuleBrowserClose()'); UniSession.Logout; AllowTerminate := True; end; Quote Link to comment Share on other sites More sharing options...
x11 Posted December 28, 2021 Author Share Posted December 28, 2021 Судя по логам, даже при перезагрузке страницы срабатывает событие OnBrowserClose() Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.