cgicookie.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:1k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. #include "cgi.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <ctype.h>
  6. extern void error(const char *);
  7. static void enomem()
  8. {
  9. error("Out of memory.");
  10. }
  11. char *cgi_cookie(const char *p)
  12. {
  13. size_t pl=strlen(p);
  14. const char *c=getenv("HTTP_COOKIE");
  15. char *buf;
  16. while (c && *c)
  17. {
  18. size_t i;
  19. for (i=0; c[i] && c[i] != '='; i++)
  20. ;
  21. if (i == pl && strncmp(p, c, i) == 0)
  22. {
  23. c += i;
  24. if (*c) ++c; /* skip over = */
  25. for (i=0; c[i] && c[i] != ';'; i++)
  26. ;
  27. buf=malloc(i+1);
  28. if (!buf) enomem();
  29. memcpy(buf, c, i);
  30. buf[i]=0;
  31. cgiurldecode(buf);
  32. return (buf);
  33. }
  34. c=strchr(c, ';');
  35. if (c)
  36. do
  37. {
  38. ++c;
  39. } while (isspace((int)(unsigned char)*c));
  40. }
  41. buf=malloc(1);
  42. if (!buf) enomem();
  43. *buf=0;
  44. return (buf);
  45. }
  46. void cgi_setcookie(const char *name, const char *value)
  47. {
  48. char *p;
  49. const char *sn;
  50. p=cgiurlencode(value);
  51. sn=getenv("SCRIPT_NAME");
  52. if (!sn || !*sn)
  53. sn="/";
  54. printf("Set-Cookie: %s=%s; path=%sn", name, value, sn);
  55. free(p);
  56. }