Php 如何使用C和G-wan web服务器设置和读取cookie

Php 如何使用C和G-wan web服务器设置和读取cookie,php,c,g-wan,Php,C,G Wan,在php中,您可以通过执行以下操作来设置cookie Setting new cookie ============================= <?php  setcookie("name","value",time()+$int); /*name is your cookie's name value is cookie's value $int is time of cookie expires*/ ?> Getting Cookie =================

在php中,您可以通过执行以下操作来设置cookie

Setting new cookie
=============================
<?php 
setcookie("name","value",time()+$int);
/*name is your cookie's name
value is cookie's value
$int is time of cookie expires*/
?>

Getting Cookie
=============================
<?php 
echo $_COOKIE["your cookie name"];
?>
设置新cookie
=============================
吃饼干
=============================
如何设置和读取cookie


我似乎在网上找不到任何解释何以这样做的文章。事实上,c web开发文章并不多

G-WAN tar ball包含两个与cookie相关的示例源代码文件:cookie.c(设置cookie)

和cookies.c(阅读cookies)

#包括“gwan.h”
#包括
#包括
// ----------------------------------------------------------------------------
//其中'cookies'=“key1=value1;key2=value2;”
// ----------------------------------------------------------------------------
静态kv_t解析_cookies(char*cookies)
{
千伏饼干店;
kv_init(&cookies_存储,“cookies”,1024,0,0,0);
char*key,*val,*lasts=0;
对于(;;)
{
key=strtok_r(cookies,“=”,&lasts);
val=strtok_r(0,;,,&lasts);
如果(!val)中断;//不再有cookies
kv_添加和cookies_存储,
&(千伏单位项目){
.key=key,
.val=val,
.flags=0,
});
cookies=0;
}
把饼干退回你的商店;
}
// ----------------------------------------------------------------------------
int main(int argc,char*argv[])
{
//使用客户端cookies(确保它们在那里)
//http_t*http=get_env(argv,http_头,0);
//kv\u t cookies\u store=解析cookies(http->h\u cookies);
//使用固定cookie(用于没有客户端cookie的测试)
char cookies[]=“key=val;foo=bar”;
kv_t cookies_store=解析cookies(cookies);
char*val=kv_get(&cookies_store,“key”,sizeof(“key”)-1);
printf(“%s=%s\n”,“key”,val);
kv_免费(和cookies_商店);
返回200;
}

Cookie的设置与任何其他HTTP头一样:


您可以在gwan存档中找到示例代码,这里是:gwan_linux64位/0.0.0.0_8080/#0.0.0/csp

它被称为“学习体验”。您是从哪里得到这个示例的?您需要为gwan编译c的示例cookie名称是什么?您可以在G-WAN tar ball:/gwan_linux32位/0.0.0.0_8080/#0.0.0.0/csp中找到它们来设置cookie,使用您在中看到的语法。c将HTTP Cookies头分解为一个。对于最后一个问题,您需要gcc才能运行G-WAN C servlet。您需要为gwan编译C吗?不,G-WAN提供了17种编程语言的脚本,包括C
#include "gwan.h" // G-WAN exported functions

int main(int argc, char *argv[])
{
   // "Set-Cookie: Domain=.foo.com; Path=/; Max-Age=%u\r\n"
   const char cookie[] = "Set-Cookie: Max-Age=3600\r\n" // 1 hour
                         "Location: /?served_from\r\n\r\nblah\r\n";
   http_header(HEAD_ADD, (char*)cookie, sizeof(cookie) - 1, argv);

   return 301; // return an HTTP code (301:'Moved')
}
#include "gwan.h"
#include <stdio.h>
#include <string.h>

// ----------------------------------------------------------------------------
// where 'cookies' = "key1=value1; key2=value2;"
// ----------------------------------------------------------------------------
static kv_t parse_cookies(char *cookies)
{
  kv_t cookies_store;
  kv_init(&cookies_store, "cookies", 1024, 0, 0, 0);

  char *key, *val, *lasts = 0;
  for(;;)
  {
     key = strtok_r(cookies, "= ", &lasts);
     val = strtok_r(0, ";,", &lasts);

     if(!val) break; //no more cookies

     kv_add(&cookies_store, 
            &(kv_item){
             .key = key,
             .val = val,
             .flags = 0,
           });

     cookies = 0;
  }
  return cookies_store;
}
// ----------------------------------------------------------------------------
int main(int argc, char *argv[])
{
  // using the client cookies (make sure that they are there)
  // http_t *http = get_env(argv, HTTP_HEADERS, 0);
  // kv_t cookies_store = parse_cookies(http->h_cookies);

  // using fixed cookies (for tests without client cookies)
  char cookies[] = "key=val;foo=bar"; 
  kv_t cookies_store = parse_cookies(cookies);

  char *val = kv_get(&cookies_store, "key", sizeof("key") - 1);

  printf("%s = %s\n", "key", val);

  kv_free(&cookies_store);
  return 200;
}