哪位大侠可以给我一个完整的isapi读写cookie范例程序?

yuol 2002-08-20 03:25:37
我在网络编程方面比较薄弱,希望能学习一些相关的知识。哪位大侠可以给我一个完整的isapi读写cookie范例程序?as soon as you can.
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Drate 2003-01-11
  • 打赏
  • 举报
回复
Delphi 3中Cookie的建立和使用

---- Cookies 是 一 种Web 服 务 器 在 客 户 端 存 储 和 返 回 信 息 的 机 制, 这 种 简 单 的、 永 久 的 和 基 于 客 户 端 的 状 态 信 息 大 大 的 扩 充 了 基 于Web 的 客 户/ 服 务 器(Client/Server) 应 用 程 序 的 能 力。 因 此 广 泛 应 用 在 大 量 的 实 际 中, 例 如 所 有 订 阅Microsoft 公 司 的MSDN 的 用 户、 访 问 过Borland Online 的 用 户, 都 会 在 本 地 存 储Cookie, 以 便 下 次 访 问 时 提 供 上 次 访 问 的 记 录。

---- Delphi 3 是Borland 公 司1997 年 推 出 的 可 视 化、 面 向 对 象 的 高 效 率 的 快 速 应 用 程 序 开 发 工 具(RAD), 提 供 了 大 量 的 最 新 功 能, 例 如 开 发COM/DCOM, 一 步 开 发ActiveX 对 象, 多 层 数 据 库 应 用 程 序MIDAS 等, 并 且 使 用Delphi 3 开 发 基 于Web 服 务 器 的 程 序, 如ISAPI/NSAPI,Win-CGI,CGI 程 序 都 十 分 方 便。

---- 使 用Delphi 3 开 发Web Server 程 序 是 非 常 简 单, 方 便 的, 因 为 在Delphi 中 提 供 了Web Module,TWebApplication, TWebRequest,TWebResponse,TPageProducer 等 大 量 的 对 象 供 使 用. 对 于Cookie,Delphi3 也 提 供 了 大 量 的 程 序 供 使 用, 如TWebResponse.Cookies,TWebResponse.SetCookieField,TWebRequest.Cookie,TWebRequest.CookieFields,TWebRequest.ExtractCookieFields 等, 应 该 是 非 常 方 便。 但 本 人 为 了 实 现 一 功 能 需 要 设 置Cookie, 但 是 发 现 使 用Delphi 提 供 的SetCookieFields 设 置 不 成 功, 经 研 究Delphi 3 所 带 的HttpApp.Pas 和IsapiApp.Pas 文 件 发 现 在 中 文Windows 95 和NT 环 境 下 该 程 序 有 错 误。

---- 根 据Netscape 公 司 的 规 定,Cookie 的 格 式 应 为:

---- Set-Cookie: Name=Value; expires=DATA; Path=PATH; domain=DOMAIN_NAME; secure

---- 而 且 根 据 规 定, 日 期(DATA) 的 设 置 必 须 满 足 格 式“Wdy, DD-Mon-YYYY HH:MM:SS GMT”, 基 于RFC822,RFC850,RFC1036 和RFC1123 等 规 定, 但 是 检 查HTTPAPP.PAS 中 的function TCookie.GetHeaderValue: string 中 为FormatDateTime('"expires="' + DateFormat + ' "GMT; "', Expires);, 其 中const DateFormat = 'ddd, dd mmm yyyy hh:mm:ss', 此 程 序 在 英 文 环 境 中 产 生 的 格 式 是 正 确 的, 但 是 在 中 文 中 产 生 的 结 果 却 不 对, 因 为 星 期 和 月 份 都 将 按 照 中 文 的 表 示 方 法: 如 将11 月 生 产“ 十 一 月” 中 文 串, 这 样 在Netscape Navigator 和Microsoft Internet Explorer 就 不 能 辨 认 了。

---- 既 然 错 误 在 于 原VCL 未 考 虑 中 文 环 境 的 问 题, 所 以 修 改 的 方 法 有:1、 修 改VCL 源 程 序, 编 译 后 将dcu 文 件 拷 贝 到Lib 目 录, 这 样 会 完 全 改 正 错 误, 这 样 是 最 根 本 的 解 决 方 法, 但 是 如 果 将 源 程 序 放 在 另 一 未 修 改 的Delphi 中( 例 如 提 供 源 程 序 给 别 人 和 自 己 重 新 安 装) 编 译 又 将 出 现 问 题。2、 因 为 使 用 并 不 太 多, 所 以 可 以 将 修 改 的 程 序 放 在 自 己 的 程 序 中, 使 用Delphi 3 提 供 的TWebResponse.SetCustomHeader 设 置, 这 样 的 好 处 是 将 程 序 放 在 自 己 的 程 序 内, 重 新 装Delphi 或 在 另 一 台 计 算 机 上 编 译 的 结 果 也 会 完 全 正 确。 因 为Cookie 的 目 的 一 般 有 两 种, 一 种 是 在 此 会 话 过 程 中 使 用, 过 后 不 使 用, 此 时 不 需 要Expires 段, 不 会 产 生 时 间 错 误, 可 以 使 用Delphi 3 提 供 的 所 有Cookie 程 序; 另 一 种 为 永 久 保 存, 时 间 一 般 越 长 越 好, 于 是 可 以 将 时 间 设 置 为2099 年 二 月22 日, 于 是 程 序 中 设 置Cookie 的 方 法 为:

---- Response.SetCustomHeader('Set-Cookie','Name=Value; expires=Sun, 22 Feb 2099 08:08:08 GMT'); ( 注 斜 体 用 自 己 的 名 称 代 替, 例 如 设 置Count =10, 则Name 用Count 代 替,Value 用10 代 替), 这 样 就 可 以 建 立Cookie 了.

---- 以 下 为 建 立 一 个 访 问 计 数 器 的 程 序, 可 以 参 照:
const
LastIp:String='0:0:0:0'; //避免重复计数
Var
S:String;
Count:Integer;
begin
S:=Request.CookieFields.Values['count'];
if S<>'' then
begin
try
Count:=StrToInt(S);
Except
Count:=0;
End;
end
else
Count:=0;

if LastIp<>Request.RemoteAddr then
Inc(Count);
LastIp:=Request.RemoteAddr;
Response.SetCustomHeader('Set-Cookie','count='+IntToStr(Count)+'; expires=Sun, 21 Feb 2010 08:08:08 GMT');
Response.Content:='您是第'+IntToStr(Count)+'来到本页!';
End;
---- ( 以 上 程 序 用Win95B 的 个 人Web 服 务 器 +Netscape Navigator 4.04 调 试 通 过)


--------------------------------------------------------------------------------

中国计算机世界出版服务公司版权所有
Drate 2003-01-11
  • 打赏
  • 举报
回复
http://delphi.about.com/library/bluc/text/uc060901i.htm
  • 打赏
  • 举报
回复
begin //// 写入cookies ////

l_rights :=query2.fieldbyname('U_rights').asstring;
l_username:=query2.fieldbyname('u_dispname').asstring;
list.add('curr_userID='+l_user);
list.Add('curr_password='+l_password);
list.add('curr_rights='+l_rights);
list.add('curr_userName='+l_username);

//response.Content:=query2.fieldbyname('U_DID').ASSTRING;

response.SetCookieField(list,'','',Now+1,false);

list.free;
end;


////读出/////
L_userRight:=Cust_request.CookieFields.Values['curr_Rights'];
...........
.........
///////////////
yuol 2002-08-20
  • 打赏
  • 举报
回复
有请发到yuol@sina.com,谢谢

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧