Delphi Cookie, como fazer para expirrar o cookie ???
Ola
Não estou conseguindo fazer com que o cookie expirre, alguem pode ajudar ??
Preciso muito disso, obrigado !!!
Não estou conseguindo fazer com que o cookie expirre, alguem pode ajudar ??
Preciso muito disso, obrigado !!!
Adritec
Curtidas 0
Respostas
Adritec
11/06/2004
Feras do Delphi
Não sei se irá ajudar em algo mas no momento estou tentando fazer da seguinte forma (é somente um exemplo):
Ah, é uma aplicação WebBroker com Delphi 7 + Firebird 1.5
Bom no WebModule tenho duas ações ´gera´ e ´ler´. Na ação /gera tenho o seguinte código no evento OnAcion
Se eu descomentar as linhas
Response.SetCookieField(slstCookie, ´´, ´/´,Now+1,False);
Response.Content := ´O cookie foi gravado. Certinhu !!!´;
e comentar as 5 linhas abaixo o Cookie é gerado beleza.
Mas preciso tentar fazer com que ele expirre em 30 minutos. Ai então nas outras ações que tenho farei uma verificação ´SE O COOKIE EXPIRROU O USUARIO SERA LEVADO NOVAMENTE PARA A TELA DE EFETUAR LOGIN´.
Bah sei que num tem muita gente trabalhando com Delphi + Aplicações Web mas se alguem puder ajudar, fico grato.
Ah na ação /ler tenho o seguinte código:
Obrigado
Não sei se irá ajudar em algo mas no momento estou tentando fazer da seguinte forma (é somente um exemplo):
Ah, é uma aplicação WebBroker com Delphi 7 + Firebird 1.5
Bom no WebModule tenho duas ações ´gera´ e ´ler´. Na ação /gera tenho o seguinte código no evento OnAcion
var
slstCookie: TStringList;
tpDate : TDateTime;
begin
slstCookie := TStringList.Create;
try
with slstCookie do begin
Clear;
slstCookie.Add(´CookieExample=ACookie´);
slstCookie.Add(´CookieField1=Value1´);
slstCookie.Add(´CookieField2=Value2´);
end;
// Response.SetCookieField(slstCookie, ´´, ´/´,Now+1,False);
// Response.Content := ´O cookie foi gravado. Certinhu !!!´;
tpDate := now();
tpDate := IncMinute(tpDate,30);
Response.SetCookieField(slstCookie,´´,´/´,tpDate,False);
Response.Content := ´O cookie foi gravado. Certinhu !!!´;
Response.Expires := tpDate;
finally
slstCookie.Free;
end;
Se eu descomentar as linhas
Response.SetCookieField(slstCookie, ´´, ´/´,Now+1,False);
Response.Content := ´O cookie foi gravado. Certinhu !!!´;
e comentar as 5 linhas abaixo o Cookie é gerado beleza.
Mas preciso tentar fazer com que ele expirre em 30 minutos. Ai então nas outras ações que tenho farei uma verificação ´SE O COOKIE EXPIRROU O USUARIO SERA LEVADO NOVAMENTE PARA A TELA DE EFETUAR LOGIN´.
Bah sei que num tem muita gente trabalhando com Delphi + Aplicações Web mas se alguem puder ajudar, fico grato.
Ah na ação /ler tenho o seguinte código:
if Request.CookieFields.Values[´CookieField1´] <> ´´ then
Response.Content := ´O valor do CookieField1 é ´ + Request.CookieFields.Values[´CookieField1´] + ´´
else
Response.Content := ´Onde está o cookie ???´;
Obrigado
GOSTEI 0
Rc.salvador
11/06/2004
Meu, estou tendo o mesmo problema que vc, e não consegui ainda encontrar uma alternativa para contornar este problema.
Estou ficando desanimado, pois já faz três dias inteiros que estou rachando a cabeça para fazer isso funcionar.
Vc encontrou uma alternativa para isso ??
Ou devo me conformar que o delphi+web é um fracasso ??
Estou ficando desanimado, pois já faz três dias inteiros que estou rachando a cabeça para fazer isso funcionar.
Vc encontrou uma alternativa para isso ??
Ou devo me conformar que o delphi+web é um fracasso ??
GOSTEI 0
Lucio Motta
11/06/2004
Feras do Delphi
Não sei se irá ajudar em algo mas no momento estou tentando fazer da seguinte forma (é somente um exemplo):
Ah, é uma aplicação WebBroker com Delphi 7 + Firebird 1.5
Bom no WebModule tenho duas ações ´gera´ e ´ler´. Na ação /gera tenho o seguinte código no evento OnAcion
Se eu descomentar as linhas
Response.SetCookieField(slstCookie, ´´, ´/´,Now+1,False);
Response.Content := ´O cookie foi gravado. Certinhu !!!´;
e comentar as 5 linhas abaixo o Cookie é gerado beleza.
Mas preciso tentar fazer com que ele expirre em 30 minutos. Ai então nas outras ações que tenho farei uma verificação ´SE O COOKIE EXPIRROU O USUARIO SERA LEVADO NOVAMENTE PARA A TELA DE EFETUAR LOGIN´.
Bah sei que num tem muita gente trabalhando com Delphi + Aplicações Web mas se alguem puder ajudar, fico grato.
Ah na ação /ler tenho o seguinte código:
Obrigado
Não sei se irá ajudar em algo mas no momento estou tentando fazer da seguinte forma (é somente um exemplo):
Ah, é uma aplicação WebBroker com Delphi 7 + Firebird 1.5
Bom no WebModule tenho duas ações ´gera´ e ´ler´. Na ação /gera tenho o seguinte código no evento OnAcion
var
slstCookie: TStringList;
tpDate : TDateTime;
begin
slstCookie := TStringList.Create;
try
with slstCookie do begin
Clear;
slstCookie.Add(´CookieExample=ACookie´);
slstCookie.Add(´CookieField1=Value1´);
slstCookie.Add(´CookieField2=Value2´);
end;
// Response.SetCookieField(slstCookie, ´´, ´/´,Now+1,False);
// Response.Content := ´O cookie foi gravado. Certinhu !!!´;
tpDate := now();
tpDate := IncMinute(tpDate,30);
Response.SetCookieField(slstCookie,´´,´/´,tpDate,False);
Response.Content := ´O cookie foi gravado. Certinhu !!!´;
Response.Expires := tpDate;
finally
slstCookie.Free;
end;
Se eu descomentar as linhas
Response.SetCookieField(slstCookie, ´´, ´/´,Now+1,False);
Response.Content := ´O cookie foi gravado. Certinhu !!!´;
e comentar as 5 linhas abaixo o Cookie é gerado beleza.
Mas preciso tentar fazer com que ele expirre em 30 minutos. Ai então nas outras ações que tenho farei uma verificação ´SE O COOKIE EXPIRROU O USUARIO SERA LEVADO NOVAMENTE PARA A TELA DE EFETUAR LOGIN´.
Bah sei que num tem muita gente trabalhando com Delphi + Aplicações Web mas se alguem puder ajudar, fico grato.
Ah na ação /ler tenho o seguinte código:
if Request.CookieFields.Values[´CookieField1´] <> ´´ then
Response.Content := ´O valor do CookieField1 é ´ + Request.CookieFields.Values[´CookieField1´] + ´´
else
Response.Content := ´Onde está o cookie ???´;
Obrigado
GOSTEI 0
Lucio Motta
11/06/2004
é bem antigo... mas segue uma dica do blog da embarcadero:
When using Cookies in webbroker, it assumes all times are in GMT for cookies so setting a cookie to expire in 2 minutes will not work unless if your timezone is GMT.
Here is a workaround.
uses
{$IFDEF MSWINDOWS}Windows,{$ENDIF}
{$IFDEF LINUX}Libc,{$ENDIF}
DateUtils;
resourcestring
RSFailedTimeZoneInfo = 'Failed attempting to retrieve time zone
information.';
function OffsetFromUTC: TDateTime;
{$IFDEF LINUX}
var
T: TTime_T;
TV: TTimeVal;
UT: TUnixTime;
begin
gettimeofday(TV, nil);
T := TV.tv_sec;
localtime_r(@T, UT);
// __tm_gmtoff is the bias in seconds from the UTC to the current time.
// so I multiply by -1 to compensate for this.
Result := -1*(UT.__tm_gmtoff / 60 / 60 / 24);
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
iBias: Integer;
tmez: TTimeZoneInformation;
begin
// Copied from IdGlobal.pas
case GetTimeZoneInformation(tmez) of
TIME_ZONE_ID_INVALID:
raise EFailedToRetreiveTimeZoneInfo.Create(RSFailedTimeZoneInfo);
TIME_ZONE_ID_UNKNOWN :
iBias := tmez.Bias;
TIME_ZONE_ID_DAYLIGHT :
iBias := tmez.Bias + tmez.DaylightBias;
TIME_ZONE_ID_STANDARD :
iBias := tmez.Bias + tmez.StandardBias;
else
raise EFailedToRetreiveTimeZoneInfo.Create(RSFailedTimeZoneInfo);
end;
{We use ABS because EncodeTime will only accept positve values}
Result := EncodeTime(Abs(iBias) div 60, Abs(iBias) mod 60, 0, 0);
end;
{$ENDIF}
Use it as: Expires := Now + (however long in TDateTimeFormat)+OffsetFromUTC;
such as: Expires := IncMinute(Now, DefaultTimeout) + OffsetFromUTC;
When using Cookies in webbroker, it assumes all times are in GMT for cookies so setting a cookie to expire in 2 minutes will not work unless if your timezone is GMT.
Here is a workaround.
uses
{$IFDEF MSWINDOWS}Windows,{$ENDIF}
{$IFDEF LINUX}Libc,{$ENDIF}
DateUtils;
resourcestring
RSFailedTimeZoneInfo = 'Failed attempting to retrieve time zone
information.';
function OffsetFromUTC: TDateTime;
{$IFDEF LINUX}
var
T: TTime_T;
TV: TTimeVal;
UT: TUnixTime;
begin
gettimeofday(TV, nil);
T := TV.tv_sec;
localtime_r(@T, UT);
// __tm_gmtoff is the bias in seconds from the UTC to the current time.
// so I multiply by -1 to compensate for this.
Result := -1*(UT.__tm_gmtoff / 60 / 60 / 24);
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
iBias: Integer;
tmez: TTimeZoneInformation;
begin
// Copied from IdGlobal.pas
case GetTimeZoneInformation(tmez) of
TIME_ZONE_ID_INVALID:
raise EFailedToRetreiveTimeZoneInfo.Create(RSFailedTimeZoneInfo);
TIME_ZONE_ID_UNKNOWN :
iBias := tmez.Bias;
TIME_ZONE_ID_DAYLIGHT :
iBias := tmez.Bias + tmez.DaylightBias;
TIME_ZONE_ID_STANDARD :
iBias := tmez.Bias + tmez.StandardBias;
else
raise EFailedToRetreiveTimeZoneInfo.Create(RSFailedTimeZoneInfo);
end;
{We use ABS because EncodeTime will only accept positve values}
Result := EncodeTime(Abs(iBias) div 60, Abs(iBias) mod 60, 0, 0);
end;
{$ENDIF}
Use it as: Expires := Now + (however long in TDateTimeFormat)+OffsetFromUTC;
such as: Expires := IncMinute(Now, DefaultTimeout) + OffsetFromUTC;
GOSTEI 0