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;