恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Delphi WebService 使用 HTTP Header 管理 Session

  • 首页
  • 资讯中心
  • /
  • Delphi WebService 使用 HTTP Header 管理 Session

相关资讯

YOLO室内手势识别手目标检测数据集-10896张 2026/8/15 1:41:26
单片机毕业设计-基于 STM32 单片机的心率血氧检测及无线传输系统设计 基于 STM32 的 MAX30102 生理信号采集与声光报警系统(013203) 2026/8/15 1:36:26
子网划分:从原理到实战的完整指南 2026/8/15 1:36:26

最新资讯

IDEA翻译插件配置指南:集成百度翻译API提升开发效率
MySQL从安装到精通:避坑指南与核心概念全解析
开源大模型企业级应用指南:可靠性、定制化与安全合规实践
APMCM数学建模竞赛在线答辩全攻略:从PPT设计到问答应对
人造跨维器械、外物科技的终极局限035
纯方位无源定位:从几何原理到无人机编队协同的算法实现

今日推荐

内景 空间站内部 中国空间站 太空 内仓
重新定义数据接口:3个突破性场景让通达信数据读取更智能
5大网络安全实操平台,免费练手入门,轻松掌握攻防技能

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

Delphi WebService 使用 HTTP Header 管理 Session

发布时间:2026/8/15 1:41:26
Delphi WebService 使用 HTTP Header 管理 Session 背景知识使用 Delphi 的 WebBroker 框架可以开发标准的 Web Server 程序。使用 Delphi 的 SOAP 框架可以开发支持 SOAP 标准的 WebService 服务端程序。此框架建立的 WebBroker 框架之上。使用 Delphi 可以开发客户端程序去调用 WebService 服务器提供的 SOAP 函数。同时也可以去调用 WebBroker 开发的 Web Server 提供的 RESTfull 的 URL 接口。问题WebBroker 的架构下客户端和服务器端没有长连接是无状态的。也就是服务器端并不能记住客户端的上一次访问。因此需要一个 Session 机制。因为是 Web 访问可以采用 HTTP Cookie 来让客户端和服务器端之间维护一个 Session。这个方式的好处是客户端基本上不需要写代码。但是如果应用程序的代码框架比较复杂比如同一个客户端可能需要访问多个不同的 WebService 服务器端甚至同时还要访问多个 WebBroker 的 WebServer 服务器端。此时Cookie 因为不能跨域从一个 WebService 服务器端程序获得的 HTTP Cookie 无法让另外一个服务器端程序读到。如果要在多个 WebService 服务器端程序之间保持同一个 Session则需要考虑使用另外两种方式1. 在 URL 里面加上 Session 有关的参数2. 在 HTTP Header 里面加上 Session 有关的参数使用 HTTP Header 来维护 Session 的代码实现客户端客户端如果使用 HTTRIO 去调用服务器端的函数设计期选中 HTTPRIO1属性面板里面事件标签页HTTPWebNode 下拉开找到OnBeforePost事件双击产生事件方法代码uses Soap.SOAPHTTPTrans; procedure TForm2.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient); begin Client.CustomHeaders[ABC] : abcdexyz; end;则每次使用这个 httpRIO1 来调用服务器端方法时都会为 HTTP 加上一个名字为 abc 的 HeaderSoapConnection 的问题是它内部的 RIO 不是一直存在的。为它设置了 URL 以后需要设置它的 Connected 属性为 True这个 RIO 才会被创建出来。因此代码可能需要显示地执行 SoapConnection1.Connected : True; 然后再判断是否有 RIO如果有则执行以下代码绑定事件SoapConnection1.RIO.HTTPWebNode.OnBeforePost : TForm2.HTTPRIO1HTTPWebNode1BeforePost;这样绑定后SoapConnection 和 HTTPRIO 应该就能共享同一个 HTTP Header 的代码了。以下代码测试通过procedure TForm2.Button2Click(Sender: TObject); begin SoapConnection1.Connected : True; if Assigned(SoapConnection1.RIO) then begin SoapConnection1.RIO.HTTPWebNode.OnBeforePost : HTTPRIO1HTTPWebNode1BeforePost; end; ClientDataSet1.Close; ClientDataSet1.Open; end;服务器端服务器端在接口方法的实现里面直接读取 HTTP Header: 的代码uses SOAP.WebBrokerSOAP, web.HttpApp; { TtestHeader } function TtestHeader.testHeader: string; begin Result : GetSOAPWebModule.Request.GetFieldByName(abc); end;服务器端的 Soap Data Module对应客户端的 SoapConnection 当客户端的 ClientDataSet.Open 的时候服务器端的 DataSetProvider.BeforeGetRecords 事件里面写代码读 Header 是否正确代码如下uses SOAP.WebBrokerSOAP, web.HttpApp; {$R *.DFM} procedure TMyDataCreateInstance(out obj: TObject); begin obj : TMyData.Create(nil); end; function TMyData.CheckHeader: Boolean; begin Result : abcdexyz GetSOAPWebModule.Request.GetFieldByName(abc); end; procedure TMyData.DataSetProvider1BeforeGetRecords(Sender: TObject; var OwnerData: OLEVariant); begin if not CheckHeader then raise Exception.Create(身份验证没通过); end;总之服务器端不管是接口方法的实现部分还是 SoapDataModule 里面都是调用GetSOAPWebModule.Request.GetFieldByName(abc);去读取 Header 来获得客户端提交的 Session ID 或者说 Token客户端使用 IdHTTPprocedure TForm2.Button3Click(Sender: TObject); var S: string; begin IdHTTP1.Request.CustomHeaders.Values[abc] : abcde; S : IdHTTP1.Get(http://localhost:8080/MyHeader); Log(S); end;上述代码使用 TIdHTTP 作为 HTTP 客户端去请求一个 WebBroker 服务器端的 MyHeader 路径。请求之前添加了一个自定义的 CustomHeader然后WebBroker 服务器端对应的代码通过以下方法读客户端传过来的 HTTP Headerprocedure TWebModule1.WebModule1MyHeaderAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var S: string; begin S : Request.GetFieldByName(abc); Response.Content : S; end;

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号