cgicc 操作 Cookie 的问题!!!

benice 2003-08-26 10:18:46
我怎么感觉使用 HTTPCookie::setMaxAge(unsigned long n) 函数没什么作用呢?
不论怎么设置这个参数,设置的 cookie 在浏览器被关闭之前始终有效,而一旦关闭就马上失效了。感觉有点象是 Session 啊。。。

本来这也没什么大问题,应该更加安全了一些。但现在我需要把一个 Cookie 删除掉,这就有问题了!我把时间设置为0它还是有效的。。。


请问这是什么问题,怎么解决啊???
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用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......

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧