如何从 Delphi 中创建的页面获取 Cookie?

How to get Cookie from page created in Delphi?

备注

Time: 2022.01.06 12:03

Some time later I explained to my superiors that the use of Delphi to create a site is not the best idea, instead persuaded to use PHP.

Thank you to everyone who participated!

我是 Delphi 的新人,也很抱歉我的英语不好。
我正在使用 Embarcadero Rad Studio Delphi 10.3.

我需要用 delphi 创建站点,所以我创建了新项目
"Delphi\web\webserver application\windows\stand-alone GUI application\vcl 应用程序"

在 WebModuleUnit(可视化视图)中,window“结构”我选择了页面的分支并在
windows“对象检查器”转到“事件”页面 --> 我在“OnAction”字段中创建事件
然后我切换到代码视图并在“WMTestPageAction”过程中编写了这段代码

procedure TWebModule1.WMTestPageAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  var
   tstStr:tstrings;
  const 
   cookieUserName='UserNameXYZ';
begin

  Response.Content :=
    '<!DOCTYPE html>'+
    '<html>'+
    '<head>'+
      '<title>Test page</title>'+
    '</head>'+
    '<body>';


tstStr:=TStringList.Create;

//Request.Create;
Request.ExtractCookieFields(tstsTr);
Response.Content :=Response.Content+'<div>test output<br>'+
'get cookie name User = '+cookieUserName+' ; Request.Cookie  = '+Request.Cookie +'<br>'+
'get cookie name User = '+cookieUserName+' ; inttostr(Request.Cookie.Length)  = '+inttostr(Request.Cookie.Length) +'<br>'+
'get cookie name User = '+cookieUserName+' ; Request.ContentFields.Text  = '+Request.ContentFields.Text +'<br>'+
'get cookie name User = '+cookieUserName+' ; Request.ContentFields.Values[''UserNameXYZ'']  = '+Request.ContentFields.Values['UserNameXYZ'] +'<br>'+
'get cookie name Token= '+cookieUserToken+' ; Request.ContentFields.Values[cookieUserToken] = '+Request.ContentFields.Values[cookieUserToken]+'<br>'+
' Request.Content = '+ Request.Content +'<br>'+
' tstsTr.Text = '+ tstsTr.Text +'<br>'+

'<br>Response<br>'+
' Response.HTTPRequest.Cookie '+ Response.HTTPRequest.Cookie +'<br>'+
' Response.Cookies.Count = '+ IntToStr(Response.Cookies.Count) +'<br>'+
' Response.GetCustomHeader(''name2'') = '+ Response.GetCustomHeader('name2') +'<br>'+

' Response.GetCustomHeader(''name2'') = '+ '' +'<br>'+

'</div>';

Response.Content :=Response.Content+'</body></html>';
end;

在“响应”中我可以形成我的页面并使用它来获取测试信息,
我可以用 Response.SetCookieField(scValues,scDomen,scPath,scExpiries,scSecure);
设置 Cookie 但是我无法在加载页面的 delphi 中获取 cookie,我尝试的所有内容都是在代码中编写的。

在浏览器控制台中执行命令 document.cookie
我收到"name2=value2; UserNameXYZ=jack; token=sd78sd78s7d8s"

我想检查我站点中所有页面每次加载时的用户会话。
代码中的响应和请求属于模块“Web.HTTPApp”。

请指教

编辑

// 12:30 I comment line with:
Request.Create; //did'nt help

终于找到信息了from embarcadero in 1999

procedure TWebModule1.WebModule1WebActionItem3Action(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  i: integer;
begin
  Response.Content := '';
  for i := 0 to (Request.CookieFields.Count - 1) do
  begin
    Response.Content := Response.Content + '

' +
    Request.CookieFields[i] + '
';
  end;
  Response.Content := Response.Content + '';
end;

我使用的提取物

function getCookieFieldByName(Sender:TStrings;vCookieName:string):string;
var i:Integer;
begin
  result:='';
  for i := 0 to (Sender.Count - 1) do
  begin
   if Pos( vCookieName+'=',Sender[i] ) >0 then
   begin
    result:= Sender[i];
    result:= Copy(result, Pos('=',result)+1 );
    Break;
   end;
  end;
end;

电话看起来像这样

result := getCookieFieldByName(Request.CookieFields,cookieUserName);