TsgcWebSocketHTTPServer事件 › OnCreateSession

OnCreateSession 事件

当 HTTP 服务器需要创建新会话时触发,以便应用程序提供自定义 TIdHTTPSession 实例。

语法

property OnCreateSession: TIdHTTPCreateSession;
// TIdHTTPCreateSession = procedure(ASender: TIdContext; var VHTTPSession: TIdHTTPSession) of object

默认值

备注

SessionState 为 True 且即将创建新会话时,底层 Indy HTTP 服务器会调用 OnCreateSession,通常发生在请求到达时没有有效的会话 Cookie 且 AutoStartSession 为 True 的情况下。如果处理程序将 VHTTPSession 保留为 nil,服务器将自行创建会话。

此事件不是使用您自己的会话类的推荐方式。当您返回一个实例时,服务器只会将其添加到会话列表中;它不会为其分配会话 ID。因此,使用普通构造函数创建的会话具有空的会话 ID 和空的会话 Cookie,并且在下一次请求时永远无法再次找到。请改用 SessionClass,它会创建您的子类,同时仍为您生成唯一的会话 ID、Cookie 以及超时处理。

此外,请勿在此事件内调用 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;

返回事件