C フォームから受け取った値をクッキーで発行
(C言語)フォームから受け取った値をクッキーで発行するにはどのようにするのでしょうか?
問題として
・フォームから値を受け取る事は出来てもクッキーが発行できない
もしくは
・フォームから値を受け取れないのにクッキーは発行できる
のどっちかしか出来ないため困りました。
どうすればフォームから受け取った値をクッキーで発行できますか?
---以下ソース---
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Deta1(char *a,int b,char *nameset[],char *valueset[]);
int Dcd(char *set,int a);
int get_cookie(char *a,int b,char *nameset2[],char *valueset2[]);
void set_cookie(char *valueset[]);
void main(void){
int i;
int a=0;
char *chr=NULL;
char *nameset[7];
char *valueset[7];
char *nameset2[7],*valueset2[7];
int b=200;
int mode=0;
char *ss=getenv("HTTP_COOKIE");
for(i=0;i<7;i++){
nameset2[i]=NULL;
valueset2[i]=NULL;
}
printf("content-type: text/html\n");
//set_cookie(valueset); //ここでset_cookie関数を呼び出せばクッキーは発行出来るけれどフォームに入力された値が入らない
printf("\n");
if(mode==0){
//省略しますがフォームで7つの項目があると思ってくださいね
if ( getenv("CONTENT_LENGTH")!=NULL ){
a = atoi( getenv("CONTENT_LENGTH") );
}
chr=(char *)malloc(a+1);
scanf("%s",chr);
chr[a] = '\0';
if (a==0){
return ;
}
printf("%s<br>",chr);
int deta1=Deta1(chr,a,nameset,valueset);
for(int i = 0;i<deta1;i++){
Dcd(nameset[i],strlen(nameset[i]));
Dcd(valueset[i],strlen(valueset[i]));
}
for(i=0;i<7;i++){
printf("%s %s<br>",nameset[i],valueset[i]);
}
//set_cookie(valueset); //ここでset_cookie関数を呼び出せばフォームが入力された値が入るけれどクッキーは発行できない
int deta2=get_cookie(ss,b,nameset2,valueset2);
for(i=0;i<7;i++){
printf("%s %s<br>\n",nameset2[i],valueset2[i]);
}
free((void *)chr);
}
else if(mode==1){
//省略
}
else{
//省略
}
}
int Deta1(char *a,int b,char *nameset[],char *valueset[]){
int i=0,cn=0;
if(a[0]==NULL){
return(-1);
}
nameset[0]=a;
while((a[++i]!=NULL)&&(i<b)){
if(a[i]=='='){
a[i]=NULL;
valueset[cn]=a+i+1;
}
else if(a[i]=='&'){
a[i]=NULL;
cn++;
nameset[cn]=a+i+1;
}
}
return cn+1;
}
int Dcd(char *set,int a){
int i,j;
char buf,*tmp;
if(a==0){
return -1;
}
tmp=(char*)malloc(a);
for(i=0,j=0;i<a;i++,j++){
if(set[i]=='+'){tmp[j]=' ';continue;}
if(set[i]!='%'){tmp[j]=set[i];continue;}
if(set[++i]>='A'){buf=set[i]-'A'+10;}
else{buf=set[i]-'0';}
buf*=16;
if(set[++i]>='A'){buf+=set[i]-'A'+10;}
else{buf+=set[i]-'0';}
tmp[j]=buf;
}
for(i=0;i<j;i++){
set[i]=tmp[i];
}
set[i]='\0';
free(tmp);
return 0;
}
int get_cookie(char *a,int b,char *nameset2[],char *valueset2[]){
int i=0,cn=0;
if(a==NULL){
return(-1);
}
while((a[++i]!=NULL)&&(i<b)){
if(a[i]=='='){
a[i]=NULL;
nameset2[0]=a+i+1;
}
if(a[i]=='-'){
a[i]=NULL;
valueset2[cn]=a+i+1;
}
else if(a[i]=='&'){
a[i]=NULL;
cn++;
nameset2[cn]=a+i+1;
}
}
return cn+1;
}
void set_cookie(char *valueset[]){
time_t timer;
struct tm *tset;
char expires[256];
char *name="sskchat";
int kikan=86400*90;
char *set[7];
int i;
for(i=0;i<7;i++){
set[i]=valueset[i];
}
for(i=0;i<7;i++){
if(set[i]==NULL){
set[i]="no";
}
}
timer = time(NULL);
timer += kikan;
tset = gmtime(&timer);
strftime(expires, 255, "%a, %d-%b-%Y %H:%M:%S GMT", tset);
printf("Set-Cookie:%s=mode-%s&name-%s&mail-%s&hp-%s&cc-%s&gyo-%s&zkou-%s; expires=%s;\n",name,set[0],set[1],set[2],set[3],set[4],set[5],set[6],expires);
}
---ソースここまで---
補足
こちらのサイトは見かけたのですがクッキーの処理の仕方はわかるのですがフォームに入力した値をクッキーに入れ方の方法が書いてないのです せっかく探していただいてすみません あまり参考になりませんでした