Delphi独立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.
相关产品推荐
相关产品推荐

