Indy http сервер сессия не работает хорошо - PullRequest
0 голосов
/ 07 декабря 2018

Как создать сеанс, используемый в idhttpserver?

Я попробовал множество способов сделать это, но не могу добраться до объекта сеанса в ARequestInfo.Session или AResponseInfo.Session. Оба они всегда равны нулю,пожалуйста помогите

procedure TFolsecPermissionManager.IdHTTPServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  Command: TCommand;
  Session: TIdHTTPSession;
begin
  Session := IdHTTPServer.CreateSession(AContext, AResponseInfo, ARequestInfo);
  IdHTTPServer.SessionList.Add(Session);


  Command:= TCommand.Create;
  Command.Start(AContext, ARequestInfo, AResponseInfo);
end;

1 Ответ

0 голосов
/ 07 декабря 2018

Убедитесь, что для TIdHTTPServer.SessionState установлено значение True.При желании вы также можете установить TIdHTTPServer.AutoStartSession на True.Они оба False по умолчанию.

Если оба True, вам не нужно вызывать CreateSession() вручную, так как он вызывается автоматически для каждого входящего запроса, который не содержит cookie для существующегосеанс.

Если SessionState=True и AutoStartSession=False, вам нужно вызвать CreateSession() вручную, когда это необходимо.

Однако, несмотря ни на что, не вызывайте SessionList.Add() вручную, так какCreateSession() называет это внутренне для вас.Вы не хотите, чтобы SessionList содержал несколько ссылок на один и тот же объект TIdHTTPSession.

...