社区
CGI
帖子详情
cgicc 操作 Cookie 的问题!!!
benice
2003-08-26 10:18:46
我怎么感觉使用 HTTPCookie::setMaxAge(unsigned long n) 函数没什么作用呢?
不论怎么设置这个参数,设置的 cookie 在浏览器被关闭之前始终有效,而一旦关闭就马上失效了。感觉有点象是 Session 啊。。。
本来这也没什么大问题,应该更加安全了一些。但现在我需要把一个 Cookie 删除掉,这就有问题了!我把时间设置为0它还是有效的。。。
请问这是什么问题,怎么解决啊???
...全文
166
5
打赏
收藏
cgicc 操作 Cookie 的问题!!!
我怎么感觉使用 HTTPCookie::setMaxAge(unsigned long n) 函数没什么作用呢? 不论怎么设置这个参数,设置的 cookie 在浏览器被关闭之前始终有效,而一旦关闭就马上失效了。感觉有点象是 Session 啊。。。 本来这也没什么大问题,应该更加安全了一些。但现在我需要把一个 Cookie 删除掉,这就有问题了!我把时间设置为0它还是有效的。。。 请问这是什么问题,怎么解决啊???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ykj76
2003-11-13
打赏
举报
回复
Cookie好像不能删掉
benice
2003-11-12
打赏
举报
回复
还是没有看到想要看到的东西。
Jakecat
2003-09-07
打赏
举报
回复
我以前写的CGI库中的CGICookie部分,你可以参考一下,呵呵
/*
iCGI - A library to extend stand library using C for CGI
*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "../StdlibX/StdlibX.h"
#include "../StdlibX/StringX/StringX.h"
#include "../StdlibX/ListX/ListX.h"
#include "../StdlibX/ListX/NodeStringToStringX.h"
#include "../StdlibX/TimeX/TimeX.h"
#include "CGIGeneral.h"
#include "CGIUrl.h"
#include "CGICookie.h"
SList *CGICookieListInitial()
{
SList *listHead;
listHead=CreateList();
if(listHead==NULL)
return NULL;
return listHead;
}
SCookieInfo *CGICookieInfoInitial()
{
SCookieInfo *info;
info=(SCookieInfo *)malloc(sizeof(SCookieInfo));
if(info==NULL)
return NULL;
info->exprires = NULL;
info->path = NULL;
info->domain = NULL;
info->secure = NULL;
CGICookieSetExprires(info,NULL);
CGICookieSetPath(info,"");
CGICookieSetDomain(info,"");
CGICookieSetSecure(info,"");
return info;
}
BOOL CGICookieListDestroy(SList *listHead)
{
return DestroyList(listHead,DeleteNodeMemberStringToString);
}
BOOL CGICookieInfoDestroy(SCookieInfo *info)
{
free(info->exprires);
free(info->path);
free(info->domain);
free(info->secure);
free(info);
return TRUE;
}
void CGICookieReadData(SList *listHead)
{
char *strCookieData;
int i,j;
SNodeMemberStringToString *member;
if( HTTP_COOKIE==NULL )
return;
strCookieData=HTTP_COOKIE;
i=0;
j=0;
while(1){
member=(SNodeMemberStringToString *)malloc(sizeof(SNodeMemberStringToString));
if( *(strCookieData+j)==0 ){
free(member);
break;
}
while( *(strCookieData+j)!='=' && *(strCookieData+j)!=0 )
j++;
member->key=(char *)malloc(j-i+1);
strncpy(member->key,strCookieData+i,j-i);
*(member->key+j-i)=0;
CGIUrlDecode(member->key);
if( *(strCookieData+j)==0 ){
free(member->key);
free(member);
break;
}
j++;
i=j;
if( *(strCookieData+i)==0 ){
free(member->key);
free(member);
break;
}
while( *(strCookieData+j)!=';' && *(strCookieData+j)!=0 )
j++;
member->value=(char *)malloc(j-i+1);
strncpy(member->value,strCookieData+i,j-i);
*(member->value+j-i)=0;
CGIUrlDecode(member->value);
if(AddListNode(listHead,(void *)member)==FALSE){
free(member->value);
free(member->key);
free(member);
printf("Error : AddListNode() failed in %s line %d\n",__FILE__,__LINE__);
exit(0);
}
if( *(strCookieData+j)==0 )
break;
j++;
j++;
i=j;
}
return;
}
void CGICookieWriteData(SList *listHead,SCookieInfo *info)
{
char data[256];
SListNode *node;
if( listHead->next==NULL )
return;
node=listHead;
while(node->next!=NULL){
strcpy(data,"Set-Cookie: ");
node=node->next;
( (SNodeMemberStringToString *)(node->member) )->key = CGIUrlEncode( ( (SNodeMemberStringToString *)(node->member) )->key );
strcat(data, ( (SNodeMemberStringToString *)(node->member) )->key );
strcat(data,"=");
( (SNodeMemberStringToString *)(node->member) )->value = CGIUrlEncode( ( (SNodeMemberStringToString *)(node->member) )->value );
strcat(data, ( (SNodeMemberStringToString *)(node->member) )->value );
strcat(data,";");
if( strcmp(info->exprires,"") ){
strcat(data," expires=");
strcat(data,info->exprires);
strcat(data,";");
}
if( strcmp(info->path,"") ){
strcat(data," path=");
strcat(data,info->path);
strcat(data,";");
}
if( strcmp(info->domain,"") ){
strcat(data," domain=");
strcat(data,info->domain);
strcat(data,";");
}
if( strcmp(info->secure,"") ){
strcat(data," secure=");
strcat(data,info->secure);
strcat(data,";");
}
printf("%s\n",data);
}
return;
}
char *CGICookieGetValue(SList *listHead,char *key)
{
return GetValueToKeyFromList(listHead,key);
}
BOOL CGICookieAddItem(SList *listHead,SNodeMemberStringToString *member)
{
return AddListNode(listHead,member);
}
BOOL CGICookieDeleteItem(SList *listHead,char *key)
{
int position;
position=GetIndexToKeyFromList(listHead,key);
return DeleteListNode(listHead,position,DeleteNodeMemberStringToString);
}
BOOL CGICookieEditItem(SList *listHead,char *key,char *value)
{
int position;
SNodeMemberStringToString *member;
char *tmp;
position=GetIndexToKeyFromList(listHead,key);
member=(SNodeMemberStringToString *)GetNodeMember( GetListNode(listHead,position) );
if( strlen(member->value) < strlen(value) ){
tmp=(char *)realloc( member->value , sizeof(char) * (strlen(value)+1) );
if(tmp==NULL)
return FALSE;
member->value=tmp;
}
strcpy(member->value,value);
return TRUE;
}
BOOL CGICookieSetExprires(SCookieInfo *info,struct tm *time_tm)
{
char buf[256];
char *tmp;
if( time_tm==NULL )
strcpy(buf,"");
else
FormatTimeString(buf,256,"%a,%d-%B-%Y %H:%M:%S GMT",time_tm);
if( info->exprires == NULL )
info->exprires=(char *)malloc( strlen(buf)+1 );
else if( strlen(info->exprires) < strlen(buf) ){
tmp=(char *)realloc( info->exprires , strlen(buf)+1 );
if(tmp==NULL)
return FALSE;
info->exprires=tmp;
}
if(info->exprires==NULL){
printf("Error : CGICookieSetExprires() failed in %s line %d\n",__FILE__,__LINE__);
exit(0);
}
strcpy(info->exprires,buf);
return TRUE;
}
BOOL CGICookieSetPath(SCookieInfo *info,char *path)
{
char *tmp;
if( info->path == NULL )
info->path=(char *)malloc( strlen(path)+1 );
else if( strlen(info->path) < strlen(path) ){
tmp=(char *)realloc( info->path , strlen(path)+1 );
if(tmp==NULL)
return FALSE;
info->path=tmp;
}
if(info->path==NULL){
printf("Error : CGICookieSetPath() failed in %s line %d\n",__FILE__,__LINE__);
exit(0);
}
strcpy(info->path,path);
return TRUE;
}
BOOL CGICookieSetDomain(SCookieInfo *info,char *domain)
{
char *tmp;
if( info->domain == NULL )
info->domain=(char *)malloc( strlen(domain)+1 );
else if( strlen(info->domain) < strlen(domain) ){
tmp=(char *)realloc( info->domain , strlen(domain)+1 );
if(tmp==NULL)
return FALSE;
info->domain=tmp;
}
if(info->domain==NULL){
printf("Error : CGICookieSetDomain() failed in %s line %d\n",__FILE__,__LINE__);
exit(0);
}
strcpy(info->domain,domain);
return TRUE;
}
BOOL CGICookieSetSecure(SCookieInfo *info,char *secure)
{
char *tmp;
if( info->secure == NULL )
info->secure=(char *)malloc( strlen(secure)+1 );
else if( strlen(info->secure) < strlen(secure) ){
tmp=(char *)realloc( info->secure , strlen(secure)+1 );
if(tmp==NULL)
return FALSE;
info->secure=tmp;
}
if(info->secure==NULL){
printf("Error : CGICookieSetSecure() failed in %s line %d\n",__FILE__,__LINE__);
exit(0);
}
strcpy(info->secure,secure);
return TRUE;
}
googleboy
2003-09-05
打赏
举报
回复
等待解答ing....
benice
2003-08-26
打赏
举报
回复
up......
cgi
cc
写
cgi
程序的库
2. **
Cookie
处理**:
CGI
CC
提供了一套完整的接口来读取、设置和管理HTTP
cookie
s,帮助保持用户会话状态。 3. **HTTP头部处理**:库中的`HTTPHeader`类允许开发者轻松地获取和设置HTTP请求头,如A
cc
ept类型、Content...
cgi
cc
.tar.gz_
cgi
c++
9. **
Cookie
处理**:通过`
Cookie
`类,`
cgi
cc
`可以方便地管理客户端的
cookie
,实现会话跟踪等功能。 10. **URL编码解码**:库内建了URL编码和解码的功能,使得处理URL参数更加便捷。 总的来说,`
cgi
cc
`是一个强大的...
C语言编写的
CGI
开发库(linux)
4. **
Cookie
操作
**:`
cgi
_set_
cookie
()`和`
cgi
_get_
cookie
()`分别用于设置和获取
Cookie
信息。 5. **错误处理**:`
cgi
_error()`用于报告错误并终止
CGI
脚本。 6. **结束处理**:完成
CGI
处理后,记得调用`
cgi
_exit()`...
Cgi
cc
体系结构剖析
Cgi
cc
体系结构剖析
cgi
cc
是开发
cgi
程序的c++库,它是基于stl的,从使用上来说,可以把它分成两个部分:第一部分是输入输出的处理和封装,它包括
Cgi
cc
、
Cgi
Environment、
Cgi
Input、FormEntry和FormFile类,第二...
使用
cookie
保存用户的登录状态——初步实现
保存用户的登录状态是许多网站都会使用,一般会使用session、数据库或者
cookie
和session相结合的办法,这里我们了解
cookie
的方法来保存用户登录状态.
Cookie
是在 HTTP 协议下,服务器或脚本可以维护客户工作站上...
CGI
2,203
社区成员
4,518
社区内容
发帖
与我相关
我的任务
CGI
Web 开发 CGI
复制链接
扫一扫
分享
社区描述
Web 开发 CGI
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章