【发布时间】:2022-01-06 18:10:42
【问题描述】:
注意
时间:2022.01.06 12:03
过了一段时间,我向上级解释了 使用 Delphi 创建网站并不是最好的主意, 而是被说服使用 PHP。
感谢所有参与的人!
我是 Delphi 的新手,也很抱歉我的英语不好。
我正在使用 Embarcadero Rad Studio Delphi 10.3。
我需要用 delphi 创建站点,所以我创建了新项目
"Delphi\web\webserver 应用\windows\独立GUI应用\vcl应用"
在 WebModuleUnit(可视视图),窗口“结构”中,我选择了页面的分支,并在
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
- tstsTr 变量仅出于获取 cookie 的原因而创建,我认为我使用了错误或遗漏了某些内容。
【问题讨论】:
-
你为什么打电话给
Request.Create?那不属于,摆脱它。另外,您正在泄漏tstStr。 -
Request.Create 可能只是简单地破坏了请求内容(连同其中的 cookie)。您不应该创建请求 - 它已经创建并传递给您的过程。我认为只需删除 Request.Create 行即可。