c/c++ 对cookie的操作

#include <stdio.h>

char *getcookie(char *var)
{
  char *p= getenv("HTTP_COOKIE");
  char sstr[1024]= {0};
  char *str;
  char *q;
  char *retstr;
  char ch;
 
  if(p)
  {
    strcpy(sstr, var);
    strcat(sstr, "=");
    str=strstr(p, sstr);
    if(str)
    {
 str += strlen(var)+1;
 q= str;
        while(*q!='/0' && *q!= ';') q++;
 if(q== str) return NULL;

        retstr= malloc(q-str+1);
 strncpy(retstr, str, q-str);
 retstr[q-str]= '/0';
 return retstr;
    }
  }
  return NULL;
}

void setcookie(char *var, char *value)
{
  char str[1024];

  strcpy(str, var);
  strcat(str, "=");
  strcat(str, value);
  strcat(str, ";");

  printf("set-cookie: %s/n", str);
}

char *getvalue(char *name)
{
  char *p, *q;
  char *chp;
  char sstr[1024]= {0};
  char *ret;
  int len;

  p= getenv("CONTENT_LENGTH");
  if(p) len= atoi(p);
  else len= 0;

  chp= malloc(len+1);
  fread(chp, len, 1, stdin);
  chp[len]= '/0';

  strcpy(sstr, name);
  strcat(sstr, "=");
  p= strstr(chp, sstr);
  if(p)
  {
    p += strlen(name)+1;
    q= p;
    while(*q!='/0' && *q!= '&') q++;
    if(q== p) return NULL;

    ret= malloc(q-p+1);
    strncpy(ret, p, q-p);
    ret[q-p]= '/0';
    return ret;
  }

  return NULL;
}

int main()
{
  char *p;
  char *vp;

  int len;

  if(strcmp(getenv("REQUEST_METHOD"), "POST")== 0)
  {
    vp= getvalue("value");
  }else
  {
    vp= NULL;
  }

  p= getcookie("name");
  if(vp)
  {
    setcookie("name", vp);
  }

  printf("Content-Type: text/html/r/n/r/n");
  printf("<html><head>");
  /*if(vp)
  {
    printf("<META http-equiv=/"refresh/" content=/"5;/cgi-bin/cookie/">");
  }*/
  printf("<title>test cookie</title></head>");
  printf("<body>");
  if(p) printf("cookie:&nbsp;%s<br>", p);
  if(vp)
  {
    printf("write cookie:&nbsp;name=%s", vp);
    printf("<br><a href=/"/cgi-bin/cookie/">next</a>");
  }else if(!p)
  {
    printf("<form action=/"/cgi-bin/cookie/" method=/"post/">");
    printf("name=<input type=/"text/" name=/"value/">");
    printf("<input type=/"submit/">");
  }
  printf("</body></html>");
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值