WebService 的 Cookie |
|
pcplayer99
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |