TsgcWebSocketHTTPServer › イベント › 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 を呼び出さないでください。このメソッドはすでに新しいセッションをリストに追加しており、ハンドラーが戻るときにサーバーが再度追加するため、同じセッションがリストに二度登録されてしまいます。全体像については セッション を参照してください。セッションがアクティブになったときに単に反応するには 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;