Jump to content

Как обновить IP адрес во время сессии?


x11

Recommended Posts

Я так понял, что свойство RemoteHost заполняется только при входе, а потом, даже если IP адрес меняется на устройстве, то свойстве RemoteHost остается старый адрес.

Как принудительно обновить адрес в RemoteHost?

Спасибо.

Link to comment
Share on other sites

Насколько я представляю TCP, если IP меняется на устройстве, то будет повторное соединение, IP должен быть актуальным всегда.

Link to comment
Share on other sites

23 hours ago, x11 said:

Я так понял, что свойство RemoteHost заполняется только при входе, а потом, даже если IP адрес меняется на устройстве, то свойстве RemoteHost остается старый адрес.

Как принудительно обновить адрес в RemoteHost?

Используйте

UniSession.ARequest.RemoteIP

 

  • Thanks 1
Link to comment
Share on other sites

Проблема в другом.

Я пытаюсь создать монитор пользователей, кто подключен и какая форма открыта.

На основе вашего примера, где используется UniServerModule.SessionManager.Sessions

      // Here we do a fast copy of list to another array for later use.
      for I := 0 to Pred(S.SessionList.Count)  do
      begin
        U := S.SessionList[I];
        fSessionList[I].ASessionId  := U.SessionId;
        fSessionList[I].AIP         := U.RemoteIP;

и вот здесь IP не меняется, не актуализируется

 

Link to comment
Share on other sites

Сессии себя ведут странно. Я уже на смартфоне закрыл браузер 28 минут назад, а сессии все еще живут.

Как такое может быть?

SessionTimeuot 15 минут.

Откуда в UniServerModule.SessionManager.Sessions до сих пор живут сессии, которые были пол часа назад прекращены?

Что я делаю не так?

 

Добавлю еще, что у меня есть код для автоматического продления сессии:

procedure TUniMainModule.UniGUIMainModuleSessionTimeout(ASession: TObject; var  ExtendTimeOut: Integer);
begin
  if not AllowTerminate then
    ExtendTimeOut := UniServerModule.SessionTimeout;// продлеваем сессию
end;

Но ведь я закрыл браузер на смартфоне. Почему сессия продлевается?

Screenshot_10.jpg

Screenshot_11.jpg

Link to comment
Share on other sites

20 hours ago, Sherzod said:
U.ARequest.RemoteIP;

 

на этой строке получаю исключение (ошибку) AV - Access violation

 fSessionList[I].AIP         := U.ARequest.RemoteIP;

 

Но ошибка только, если запустить монитор сессии еще раз параллельно с другого браузера.

Т.е. когда один пользователь уже работает, то ошибки нет. Когда второй пользователь тоже хочет открыть монитор сессий, то U.ARequest возвращает nil.

 

Screenshot_1.jpg

Link to comment
Share on other sites

On 12/6/2021 at 5:52 PM, x11 said:

Но ошибка только, если запустить монитор сессии еще раз параллельно с другого браузера.

Т.е. когда один пользователь уже работает, то ошибки нет. Когда второй пользователь тоже хочет открыть монитор сессий, то U.ARequest возвращает nil.

 

2 hours ago, x11 said:

up

Пожалуйста, создайте тестовый проект. 

Link to comment
Share on other sites

1 hour ago, Sherzod said:

Пожалуйста, создайте тестовый проект. 

Возьмите свой пример (\Demos\Desktop\Session List) из Demo и замените там 72 строку

ASessionList[I].AIP := U.ARequest.RemoteIP;// U.RemoteIP;

и запустите в разных браузерах

Screenshot_15.jpg

Link to comment
Share on other sites

On 12/6/2021 at 5:52 PM, x11 said:

на этой строке получаю исключение (ошибку) AV - Access violation

 fSessionList[I].AIP         := U.ARequest.RemoteIP;

Попробуйте такой подход:

1.  fSessionList[I].AIP         := U.ARequest.RemoteIP; используйте 

U.RemoteIP

2. 

procedure TUniMainModule.UniGUIMainModuleHandleRequest(ASession: TObject;
  var Handled: Boolean);
begin
  with (ASession as TUniGUISession) do
    RemoteIP := ARequest.RemoteIP
end;

 

  • Thanks 1
Link to comment
Share on other sites

Спасибо, вроде получилось.

Было бы хорошо, если бы это исправили в uniGUI, чтобы не использовать данный костыль.

  • Upvote 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...