TsgcHTTPServer › 이벤트 › OnCreateSession
HTTP 서버가 새 세션을 생성해야 할 때 발생하여 애플리케이션이 사용자 정의 TIdHTTPSession 인스턴스를 제공할 수 있습니다.
property OnCreateSession: TIdHTTPCreateSession;
// TIdHTTPCreateSession = procedure(ASender: TIdContext; var VHTTPSession: TIdHTTPSession) of object
—
OnCreateSession은 SessionState가 True이고 새 세션이 생성되려고 할 때, 일반적으로 유효한 세션 쿠키 없이 요청이 도착하고 AutoStartSession이 True일 때, 내부 Indy HTTP 서버에 의해 호출됩니다. 핸들러가 VHTTPSession을 nil로 두면 서버가 직접 세션을 생성합니다.
이 이벤트는 사용자 정의 세션 클래스를 사용하는 권장 방법이 아닙니다. 인스턴스를 반환하면 서버는 이를 세션 목록에 추가하기만 할 뿐, 세션 ID를 할당하지 않습니다. 따라서 일반 생성자로 생성된 세션은 빈 세션 ID와 빈 세션 쿠키를 가지게 되어, 다음 요청에서 다시 찾을 수 없습니다. 대신 SessionClass를 사용하십시오. 이는 사용자 정의 하위 클래스를 생성하면서도 고유한 세션 ID, 쿠키 및 타임아웃 처리를 대신 생성해 줍니다.
또한 이 이벤트 내에서 SessionList.CreateUniqueSession을 호출하지 마십시오. 이 메서드는 이미 새 세션을 목록에 추가하며, 핸들러가 반환될 때 서버가 이를 다시 추가하므로 동일한 세션이 목록에 두 번 남게 됩니다. 전체 내용은 Sessions를 참조하십시오. 세션이 활성화될 때 단순히 반응하려면 OnSessionStart를 사용하십시오.
procedure OnCreateSession(ASender: TIdContext; var VHTTPSession: TIdHTTPSession);
begin
// leave VHTTPSession as nil to let the server create the session
Log('new HTTP session allocated');
end;