|
щаем значение параметра
return pszBegin;
}
}
}
// -----------------------------------------------
// insertHTML
// Вставка в буфер содержимого текстового файла
// -----------------------------------------------
void insertHTML(char * pszFileName, char * pszBuf)
{
HFILE hSrcFile;
DWORD dwFileSize;
// Открываем файл
hSrcFile = _lopen(pszFileName, OF_READ);
// Определяем его длину
dwFileSize = _llseek(hSrcFile, 0, 2);
// Устанавливаем указатель на начало файла
_llseek(hSrcFile, 0, 0);
// Читаем файл в буфер
_hread(hSrcFile, pszBuf, dwFileSize);
// Закрываем буфер двоичным нулем
pszBuf[dwFileSize] = '\0';
// Закрываем файл
_lclose(hSrcFile);
}
В переменной szCookieHeader мы подготовили заголовок Set-Cookie,
предназначенный для создания параметра cookie с именем AgainCount:
char szCookieHeader[] =
"Set-Cookie: AgainCount=0;\r\nContent-type: text/html\r\n\r\n";
Начальное значение этого параметра равно нулю.
Заголовок, хранящийся в переменной szCookieRemoveHeader, предназначен для
удаления cookie:
char szCookieRemoveHeader[] =
"Set-Cookie: AgainCount=0;expires=Mon 03-May-1993 12:00:00
GMT;\r\nContent-type: text/html;\r\n\r\n";
Эффект удаления достигается благодаря тому, что в параметре expires мы
указали уже наступившую дату.
Сразу после запуска программа CGI получает значение переменных среды
QUERY_STRING и HTTP_COOKIE:
pszQueryString = getenv("QUERY_STRING");
pszCookie = getenv("HTTP_COOKIE");
В первой из них хранится параметр запуска программы CGI, а во второй -
строка cookie (если она определена).
Далее наша программа анализирует параметр запуска.
Если программа вызвана с параметром go, она проверяет переменную pszCookie.
В эту переменную функция getenv записывает строку cookie или значение NULL,
если cookie не определено.
При первом посещении cookie еще нет, поэтому наша программа добавляет к
заголовку HTTP формируемого документа заголовок Set-Cookie:
printf("Content-type: text/html\r\n");
printf(szCookieHeader);
Затем программа выводит приглашение для первого посещения и завершает свою
работу.
В том случае, если в принятом запросе уже имеется информация о cookie,
программа CGI извлекает значение параметра cookie с именем AgainCount, вызывая
для этого функцию findCookie:
pszMyCookie = findCookie("AgainCount");
Эта функция определена в нашей программе и будет описана чуть позже.
Полученная строка преобразуется в численное значение при помощи функции atoi,
после чего это значение увеличивается на единицу, преобразуется обратно в
тестовую строку и записывается в буфер szBuf1:
nCount = atoi(pszMyCookie);
nCount++;
sprintf(szBuf1, "%d", nCount);
На следующем этапе программа формирует заголовок Set-Cookie с новым
значением параметра AgainCount:
printf("Content-type: text/html\r\n");
strcpy(szBuf, "Set-Cookie: AgainCount=");
strcat(szBuf, szBuf1);
strcat(szBuf, ";\r\nContent-type: text/html\r\n\r\n");
printf(szBuf);
Этот заголовок вместе с заголовком Content-type записывается в создаваемый
документ HTML.
Далее после вывода приглашения для повторного посещения страницы программа
CGI записывает в документ новое значение счетчика посещений:
printf("Access count: %s",szBuf1);
И, наконец, перед завершением своей работы программа вставляет в текст
документа HTML файл со сценарием JavaScript, вызывая для этого функцию
insertHTML:
insertHTML("script.ht", szBuf);
Эта функция определена в нашей программе, как и функция findCookie.
Когда программа CGI вызывается для удаления cookie с параметром c
|
|