Cookies e sessions são maneiras de guardar algumas informações do usuário que visita determinada página, ou aplicação Web em arquivos, de maneira a tornar essas informações disponíveis entre várias páginas e, às vezes, entre visitas do usuário ao site (desde que o navegador não seja fechado e os dados de navegação não sejam apagados).
O cookie normalmente é gravado na máquina do cliente, em diretório diferente de acordo com o navegador utilizado e o sistema operacional. As informações salvas em cookies podem ser acessadas pelo usuário na máquina local e até alteradas - o que torna o cookie pouco seguro, se comparado às 
sessions.
As sessions (ou sessões) possuem funcionamento similar ao dos cookies, porém, o arquivo que guarda as informações é mantido no servidor do site visitado e identificado por uma cadeia alfanumérica única para cada visitante. 
O usuário não pode alterar informações de sua sessão, a menos que o site permita. Por ser mais seguro que o cookie, as informações de login e senha, por exemplo, são comumente guardadas em sessões.
Para este exemplo, vamos criar uma nova action em nosso Webmodule com o nome "info". Para que o controle por sessions seja possível em nossa aplicação, marque a propriedade "CreateSession" como "True", através do "Object Inspector". 
No evento "OnRequest" da "action info", adicione o seguinte código:
procedure TFPWebModule1.infoRequest(Sender: TObject; ARequest: TRequest;
    AResponse: TResponse; var Handled: Boolean);
var
 cv : string;
 cookie: TCookie;
begin
 //pega o valor de uma chave de Cookie para testar se ele existe
 cv := ARequest.CookieFields.Values['meucookie'];
//Se o valor da chave 'meucookie' existir... 
 if cv <> '' then
 begin
    //mostra o valor da chave 
    AResponse.Content := 'Cookie tem valor: ' + cv + '<br /><br />';
 end
 else begin
    //se não, retorna não configurado e prepara para a próxima execução 
    AResponse.Contents.Add( 'Cookie não configurado!<br /><br />' );
    //cria o Cookie que será lido na próxima execução 
    cookie := AResponse.Cookies.Add;
    cookie.Name := 'meucookie';
    cookie.Value := 'valor_do_cookie';
 end;
//Se a aplicação puder criar a Session... 
 if CreateSession and Assigned(Session) then
 begin
   //verifica se há uma variável de sessão com algum valor 
    if Session.Variables['minhasession'] <> '' then
    begin
    AResponse.Contents.Add( 'Session ID: ' + Session.SessionID + '<br />' );
    AResponse.Contents.Add( 'Session minhasession tem valor: ' + Session.Variables['minhasession'] );
    end
    //se não houver valor, informa e atribui para a próxima execução 
    else begin
    AResponse.Contents.Add( 'Session sem valor!' );
    //O ID da Session é atribuído automaticamente 
    //só precisamos adicionar valores às variáveis que utilizaremos 
    Session.Variables['minhasession'] := 'valor_da_minha_session';
    end;
 end
 else begin
    AResponse.Contents.Add( 'Erro criando sessão!' );
 end;
//informa que a ação foi completada 
 Handled := true;
end;
Os comentários no código explicam o que cada linha faz. Você vai notar que usei a tag <br /> no final de algumas linhas; é o correspondente em HTML para o \n, já que a saída da nossa aplicação será interpretada pelo navegador.
Agora, podemos compilar nosso projeto e colocá-lo na pasta "cgi-bin" do servidor. Para testá-lo, acessamos a seguinte URL no navegador:
-   http://127.0.0.1/cgi-bin/projeto.cgi/info
A priori, não haverão informações a serem apresentadas, já que esta é a primeira vez que o programa é executado, e tanto o cookie quanto a session, acabaram de ser criados. 
Recarregue a página e as informações serão apresentadas. O que ocorre nesta segunda execução é nada mais que a verificação de existências de cookies e sessions (se eles já foram criados para este usuário) e, em caso positivo, apresenta as informações geradas na primeira vez (na criação). 
Lembre-se que essas informações poderão persistir até que o navegador seja fechado, assim, se quiser fazer um novo teste, limpe o cache do navegador e atualize a página.