我正在尝试读取cookie,但下面的脚本返回一个空字符串。
http_t *http = (http_t*)get_env(argv, HTTP_HEADERS);
xbuf_t *read_buf = (xbuf_t*)get_env(argv, READ_XBUF);
char *p = read_buf->ptr;
char *cookies = http->h_cookies ? p + http->h_cookies : 0;
xbuf_xcat(reply, "<HR>COOKIES [%s]<br>", cookies);
我已经设置了一个cookie以前使用:http_header(我可以看到在chrome的控制台)
那么我如何读取cookie呢?
谢谢你的回答。
我使用的是GWAN 4.11.20
我为g-wan编写了一个简单的库。你可以用它来获取饼干。示例代码:
char *val = gw_cookie(argv, "cookie_name=", 12);
链接:https://github.com/fatihky/gwanup/blob/master/gwanup.h,
v4.11发布时没有同步gwan/includes
标头,尽管添加了新的值。
因此,get_env()
在G-WAN脚本中使用的一些值与G-WAN使用的值不匹配。
一个解决方案是纠正这些值在gwan.h
头。访问cookie的另一种更简单的方法是使用READ_XBUF(请参阅"连接处理程序"选项卡)访问读取缓冲区,然后使用类似于G-WAN cookie .c示例的代码查找cookie。
Paulo,一个有同样问题的G-WAN用户给我们发来了以下源代码:
int getSessionID(int argc, char *argv[]) {
http_t *http = (http_t*)get_env(argv, HTTP_HEADERS);
xbuf_t *read_buf = (xbuf_t*)get_env(argv, READ_XBUF);
char *p = read_buf->ptr;
int sessionID = 0;
if (http) {
sessionID = http->session_id;
fprintf(stderr, "Get SessionID %dn", sessionID);
}
fprintf(stderr, "Get SessionID Cookie %dn", http->h_cookies);
if (p && *p && http->h_cookies) {
char *cookies = p + http->h_cookies;
fprintf(stderr, "Get SessionID Cookie %sn", cookies);
// The sessionID is on the Cookie
sessionID = atoi(cookies + 5);
}
if (!sessionID) {
// The sessionID is not on the Cookie so send the server Session_ID
sessionID = (int)get_env(argv, SESSION_ID);
}
if (!sessionID) {
// Oops! I have no session from the Server. use the IP Address and a timestamp
sessionID = (int)get_env(argv, REMOTE_BIN_ADDR) + getms();
}
return sessionID;
}