CGI的一点经验

CGI的优点是交互,提供表单服务,没有这个,CGI也只和普通的静态网页没有区别。在编写cgi-bin的时候,有几点需要特别的注意:
1、网页的标头:非常重要

printf("Content-type:text/html/n/n");

2个换行,否则BOA不认,当然,具体类型参考资料。
 
2、cookie格式
为此郁闷了好久,主要是cookie的时间格式,必须按照标准来,否则使用过期时间后不认,导致无法注销cookie

time_t now;
struct tm *loctm;
char *wday[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
char *mon[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};

time(&now);
loctm=localtime(&now);

printf("Set-Cookie:Name=%s;Expires=%s,%d-%s-%d %d:%d:%d GMT/r/n",usr,wday[loctm->tm_wday],loctm->tm_mday,mon[loctm->tm_mon]
,loctm->tm_year+1900,loctm->tm_hour,loctm->tm_min,loctm->tm_sec); printf("Content-type:text/html/n/n");

而且cookie应该打在标头的前一行。当时间设置正确即生效,设置已经过去的时间,则为注销cookie。

3、集成处理的cgi(我自己提的名词)
也就是提交给自己处理的cgi-bin文件。其实实现方法很简单,在输出打印网页之前首先判断环境变量是否存在值,有则首先处理,然后打印。
流程大概是这样的:

显示网页

修改提交

处理→提交给自己,重新加载cgi-bin一次,并进行处理

写入文件

读取文件

显示网页

即在显示前加上:

if(getenv("CONTENT_LENGTH"))
if(getenv("QUERY_STRING"))
 
同样,还可以活用,就是首先用QUERY_STRING读取当作某个参数,然后可以有选择的对CONTENT_LENGTH进行处理,这里就不延伸下去了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左脉千帆云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值