如何使用 C 和 G-wan 网络服务器设置和读取 cookie
How to set and read cookies using C and the G-wan web server
在 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?
我似乎无法在网络上找到任何解释如何执行此操作的文章。其实c web开发的文章并不多
G-WAN tar 球包含 2 个与 cookie 相关的示例源代码文件:cookie.c(设置 cookie)
#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')
}
和cookies.c(读取cookies)
#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;
}
Cookie 的设置与任何其他 HTTP 一样 header : http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#innerlink_set-cookie
您可以在 gwan 存档中找到示例代码,此处:gwan_linux64-bit/0.0.0.0_8080/#0.0.0.0/csp
在 php 中,您可以通过
设置 cookieSetting 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?
我似乎无法在网络上找到任何解释如何执行此操作的文章。其实c web开发的文章并不多
G-WAN tar 球包含 2 个与 cookie 相关的示例源代码文件:cookie.c(设置 cookie)
#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')
}
和cookies.c(读取cookies)
#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;
}
Cookie 的设置与任何其他 HTTP 一样 header : http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#innerlink_set-cookie
您可以在 gwan 存档中找到示例代码,此处:gwan_linux64-bit/0.0.0.0_8080/#0.0.0.0/csp