You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi独立WebServer中Cookie读写失效问题求助

问题解决:Delphi SOAP WebServer Cookie读写失败

核心问题分析与修复

1. Cookie域名参数错误

SetCookieField的域名参数不能包含端口号,浏览器的Cookie机制中,Domain属性仅识别域名本身,端口不属于域名范畴。原代码中'plansoft.local:5173'会导致Cookie无法被正确存储。

2. 内存泄漏风险

创建的TStringList未释放,虽不直接影响Cookie功能,但会导致内存泄漏,需添加try...finally块确保资源释放。

3. 上下文与客户端兼容性

需确保GetSOAPWebModule获取到当前请求的WebModule实例,同时客户端需正确携带Cookie(浏览器需匹配域名,SOAP客户端需启用Cookie处理)。


修正后的代码

写入Cookie的修正版本

procedure Tservice1.write_cookie; stdcall;
var mc: TStringList;
begin
  mc := TStringList.Create;
  try
    mc.Add('name=1234');
    // 移除域名中的端口号
    GetSOAPWebModule.Response.SetCookieField(mc, 'plansoft.local', '/', Now + 1000, False);
  finally
    mc.Free; // 释放资源
  end;
end;

读取Cookie的修正版本

procedure Tservice1.read_cookie; stdcall;
var s: string;
begin
  s := GetSOAPWebModule.Request.Cookie;
  // 增加空指针检查,避免运行时错误
  if Assigned(Form1) and Assigned(Form1.Memo1) then
    Form1.Memo1.Lines.Add(s);
end;

额外注意事项

  • 客户端必须使用plansoft.local:5173访问服务,不能用IP或其他域名,否则浏览器不会匹配并存储Cookie。
  • 检查HTTPSoapDispatcher1的DispatchOptions属性,确保包含doResponse值,保证响应能正确发送到客户端。
  • 若使用Delphi的HTTPRIO作为SOAP客户端,需将其HandleCookies属性设为True,才能自动管理Cookie。

内容的提问来源于stack exchange,提问作者hr.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:34:56