Olá, galera Delphiana! Este é meu primeiro artigo e eu estou muito feliz por poder fazer parte da comunidade Active Delphi, que tanto contribuiu para os desenvolvedores Delphi durante todos esses anos. O objetivo deste artigo é demonstrar a utilização de cookies no Delphi Intraweb. Neste exemplo, armazenaremos o usuário e a senha em cookies distintos para que não seja necessário o preenchimento dos mesmos toda vez que se deseja efetuar o login no sistema.
Primeiramente, vamos criar um novo projeto: File/New/Other/VCL for the Web. Selecione VCL for the Web Application Wizard e clique em OK.
Será aberta uma janela para configuração do tipo de aplicação que será criada. Neste caso, não há necessidade de fazer nenhuma modificação, exceto a do Project Name para prjCookies
No exemplo em questão, criei uma tela como é mostrado abaixo:

Figura 1 - Interface da página de login
Antes de começarmos a montar nossa tela, vamos renomear a unit para untLogin (no Project Manager) e o formulário para frmLogin. Configure os componentes da seguinte forma:
Componente |
Nome |
Valor |
IWLabel |
lblLogin |
Login |
IWLabel |
lblUsuario |
Usuário: |
IWLabel |
lblSenha |
Senha: |
IWEdit |
edtUsuario |
|
IWEdit |
edtSenha |
|
IWCheckBox |
ckbLembrarSenha |
Lembrar minha senha |
IWButton |
btnEntrar |
Entrar |
Após a configuração de nossa tela, vamos criar um novo formulário: File/New/Other/VCL for the Web. Selecione New Form, após a confirmação, será aberta uma janela para configuração do tipo de formulário que se deseja criar, neste caso usaremos o padrão (Application Form).
A tela ficará como mostrado abaixo:

Figura 2 - Interface da página principal do sistema, exibida após o login
Vamos renomear a unit para untHome (no Project Manager) e o formulário para frmHome. Configure os componentes da seguinte forma:
Componente |
Nome |
Valor |
IWLabel |
lblMsg |
lblMsg |
IWLink |
lnkVoltar |
Voltar |
Importante: Todos componentes encontram-se na paleta IWStandard: IWLabel, IWEdit, IWCheckbox, IWButton, IWLink.
Adicionemos então a untHome na Uses List da untLogin e vice-versa, para que possamos chamar os formulários de cada uma das telas.
Vamos agora codificar nosso projeto-exemplo. Primeiro, o evento Click do btnEntrar:
procedure TfrmLogin.btnEntrarClick(Sender: TObject);
begin
if (edtUsuario.Text = '') or (edtSenha.Text = '') then
begin
WebApplication.ShowMessage('É necessário especificar Usuário e Senha!');
Exit;
end;
if ckbLembrarSenha.Checked then
begin
//Armazenamento da senha
with WebApplication.Response.Cookies.Add do
begin
Name := 'pwd';
Value := edtSenha.Text;
end;
//Armazenamento do usuário
with WebApplication.Response.Cookies.Add do
begin
Name := 'usr';
Value := edtUsuario.Text;
end;
end;
untHome.TfrmHome.Create(WebApplication).Show;
end;
Podemos perceber que os cookies são armazenados através do comando WebApplication.Response.Cookies.Add, onde indicamos seus respectivos nomes e valores. Agora o evento IWAppFormCreate:
procedure TfrmLogin.IWAppFormCreate(Sender: TObject);
begin
if (WebApplication.Request.CookieFields.Values['usr'] = '') and
(WebApplication.Request.CookieFields.Values['pwd'] = '') then
begin
edtUsuario.Text := '';
edtSenha.Text := '';
ckbLembrarSenha.Checked := False;
end
else
begin
edtUsuario.Text := WebApplication.Request.CookieFields.Values['usr'];
edtSenha.Text := WebApplication.Request.CookieFields.Values['pwd'];
ckbLembrarSenha.Checked := True;
end;
end;
Para capturarmos o valor de um cookie usamos o comando WebApplication.Request.CookieFields.Values[<nome_cookie>]. Os cookies só serão armazenados se o ckbLembrarSenha estiver selecionado e os campos estiverem preenchidos.
Neste caso, apenas como forma de ilustração, será aberta uma tela dizendo que o login foi efetuado com êxito.

Figura 3 - interface da figura 2 em execução.
Ao clicar no lnkVoltar, o sistema retornará à tela de Login com os cookies em seus respectivos campos.
Qualquer dúvida estou a disposição!
Abraços a todos!
Observação: Este projeto de exemplo foi desenvolvido em Delphi 2010 e pode ser baixado aqui (1,02 MB).
Por: Rodrigo Alves dos Santos
Contato: rod.alves88@gmail.com
|