LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1685|回复: 6

cgi中cookie设置问题?

[复制链接]
发表于 2007-8-2 12:50:08 | 显示全部楼层 |阅读模式
参照网上资料,测试代码如下:
#include   <stdlib.h>
  #include   <stdio.h>
  #include   <time.h>
  int   main(void)
  {
        int   i;
        time_t   t;
        long int sess_id=time(&t);
        printf("Set-Cookie:sess_id=%ld\n",sess_id);
        printf("cookie string: %s\n",getenv("HTTP_COOKIE"));
        return 0;
  }
运行结果:
Set-Cookie:sess_id=1186027421
cookie string: (null)
请问cookie为什么没有被设置成功?
清经验大牛给予指导!多谢!
发表于 2007-8-2 13:01:49 | 显示全部楼层
cookie是在设置后存储在浏览器端.
不是在服务器端.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-2 13:58:48 | 显示全部楼层
多谢岛主指点!
我在客户端试过了,好像第一次还是NULL,但刷新之后就都有值了,请问这是为什么?
换了2台机子试也是这样,都第一次为NULL,请岛主帮忙解答!

cgi文件cookie.c:
  #include   <stdlib.h>
  #include   <stdio.h>
  #include   <time.h>
  int   main(void)
  {
        int   i;
        char *p;
        time_t   t;
        long int sess_id=time(&t);
        printf("Set-Cookie:sess_id=%ld\n",sess_id);
        p=getenv("HTTP_COOKIE");
        printf("Content-Type:text/html\n\n");
        printf("cookie string: %s\n",p);
        return 0;
  }

html文件test.html:
<html><head>
<title>Test Cookie</title>
</head>
<body>
<form METHOD=GET ACTION="./cookie">
<INPUT TYPE="SUBMIT" VALUE="get cookie">
</form>
</body>
</html>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-2 21:06:31 | 显示全部楼层
每次重新启动浏览器之后,取cookie时第一次都是NULL,请各位大侠帮忙分析一下!
为什么就第一次没有昵?
难道是第一次取的时候cookie还没被创建(但第一次以后为什么又创建了昵?)?
还是不明白需要修改测试代码的哪一部分!
请大侠赐教!!!
回复 支持 反对

使用道具 举报

发表于 2007-8-8 17:54:08 | 显示全部楼层
Without expiration time?
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <err.h>
  5. int main(void)
  6. {
  7.         char *p, s[30];
  8.         time_t t;
  9.         struct tm *p_tm;
  10.         long int sess_id=time(&t);
  11.         p_tm = gmtime(&t);
  12.         p_tm->tm_hour += 1; // just keep this cookie for an hour
  13.         if ( strftime(s, 30, "%a, %d %b %Y %H:%M:%S %Z", p_tm) == 0 )
  14.                 errx(1, "strftime");
  15.         printf("Set-Cookie:sess_id=%ld; expires=%s\n",sess_id, s);
  16.         p=getenv("HTTP_COOKIE");
  17.         printf("Content-Type:text/html\n\n");
  18.         printf("cookie string: %s\n",p);
  19.         return 0;
  20. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-4-3 15:31:56 | 显示全部楼层
你好,请问你是在uclinux的平台下的吗,我返回的都是null,为什么啊?程序能完整的拿出来看看吗?
回复 支持 反对

使用道具 举报

发表于 2008-4-17 21:49:49 | 显示全部楼层
Post by netspectrum;1743870
每次重新启动浏览器之后,取cookie时第一次都是NULL,请各位大侠帮忙分析一下!
为什么就第一次没有昵?
难道是第一次取的时候cookie还没被创建(但第一次以后为什么又创建了昵?)?
还是不明白需要修改测试代码的哪一部分!
请大侠赐教!!!


你有这样的疑问是因为你还没有理解web的工作方式,在cgi中,getenv获取的是浏览器提交过来的信息,而每次请求浏览器会给服务器提交一次信息,于是,你的程序第一次执行的时候,很显然此时浏览器没有sess_id的信息,所以sess_id是null,所以getenv获取不到信息,但是,你这次执行程序的时候还有一个操作printf("Set-Cookie:sess_id=%ld\n",sess_id);,它将cookie放入http头然后返回给浏览器,也就是说,第一次执行完之后浏览器已经得到了这个cookie,然后你程序再次执行的时候,浏览器向服务器发送的数据自然包含了cookie.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表