Delphi 的 WebService 的 Cookie 操作


本文整理自网络,侵删。

 
WebService 底下是 Web 操作,在 DELPHI 的 WebService 框架底下,客户端对服务器端的操作,都是对服务器的一次 WEB 访问。


服务器端如何验证客户端的用户身份?最简单的办法是客户第一次登录时提供一个用户ID,服务器端把这个 ID 写到 Web 的 Cookie 里面。以后服务器端每次处理客户端请求的时候,都可以通过读 Cookie 来获取当前发起这个请求的客户端的用户 ID。


 对 于客户端的 HttpRIO 来说,Cookie 是透明的。只要实例一直存在,只要服务器端在返回的时候设置了 COOKIE,它会每次调用的时候自动提交服务器端设置的 COOKIE,无须代码干预,也无法干预(实在要干预,必须用 HttpRIO 的底层的 WINAPI 函数)。


WebService 的服务器端要处理基于 Web 的 Cookie,必须首先 uses WebBrokerSOAP, HttpApp 这两个单元。


服务器端创建这个 COOKIE:

procedure TXinWen.GetCookie;
var
  ACookie: TCookie;
begin
  ACookie := GetSOAPWebModule.Response.Cookies.Add;
  ACookie.Name := 'MyCookie';
  ACookie.Value := 'abc';
end;
 
---------------------------
以后服务器端的函数被客户端调用,或者客户端提交数据,服务器端需要处理的时候,可以通过读 COOKIE 来验证身份:
 
function TXinWen.CheckCookie: Boolean;
begin
  Result := (GetSOAPWebModule.Request.CookieFields.Values['MyCookie'] = 'abc');
end;
 
 
---------------------------

上述代码,写成 CGI 或者 ISAPI 在 IIS 底下运行没有问题。


如果 WebService 服务器做成独立的EXE,它是基于 Indy WEB Server 的。上述代码会有问题,CheckCookie 方法读不到 COOKIE


原因是创建这个 COOKIE 的 GetCookie 方法里面,没有为 COOKIE 写上生存期。


如果按下面的方式写,基于 INDY 的独立服务器,也能处理 COOKIE 了:
procedure TXinWen.GetCookie;
var
  ACookie: TCookie;
begin
  ACookie := GetSOAPWebModule.Response.Cookies.Add;
  ACookie.Name := 'MyCookie';
  ACookie.Value := 'abc';
  ACookie.Expires := Now + 10; //生存期从现在开始一直10天。
end;

――――――――――――――――

原文链接:https://blog.csdn.net/pcplayer/article/details/69245896

相关阅读 >>

Delphi cb_addstring 与lb_addstring的区别?

Delphi unigui unicheckbox勾选

Delphi 防止刷新时闪烁的终极解决办法

Delphi xe10 给程序添加uac权限

Delphi setprivilege 提权代码

Delphi+access错误"不正常地定义参数对象。提供了不一致或不完整的信息。"

Delphi判断ie是否使用代理

Delphi 让scrollbox响应鼠标滚轮事件

Delphi 优盘背景生成器源码

Delphi 调节音量代码

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...