记录用户记录脚本
在<IMG>标签使用一个指定CGI脚本的URL,可以在图象被传递之前进行额外处理。额外的处理记录了有关网页当前用户的详细信息。这个额外信息将发送给CGI脚本来指定Action的正确的详细数据。比如 :
格式化的文本
Html
.
<IMG SRC="http://www.QQread.com/cgi-bin/mas_rec?page=HTML&file=log&img=dot.gif"
ALT="Record not made">
语句中的CGI脚本mas_rec是用C++编写的,它发送以下的信息:
参数名字
要求
File
文件的名字,在上面用法信息将被附上
Page
网页的名字,它将被记录在日志中
img
要装载的图片
记录用户记录脚本
//以下是mas_res程序
#include "t99_type.h"
#include
#include
#include
#include
#include
#include
#include
#include "parse.h"
#include "parse.cpp"
#include "mas_cvo.cpp"
void write_log_entry( char[], char[] );
void cgi_var_output();
char* getenv_n( char [] );
void gif_output( char [] );
int main()
{
char *query_str = getenv("QUERY_STRING");
Parse list( query_str == 0 ?
(char*)"file=mas&page=Test&" : query_str );
if ( list.get_item( "file" ) != NULL )
{
write_log_entry( list.get_item_n( "file", 1, true ),
list.get_item_n( "page" ) );
}
if ( list.get_item( "img" ) != NULL )
{
gif_output( list.get_item_n("img", 1, true) );
} else {
html("Content-type: text/html"); html("");
cgi_var_output(); // debug option
}
return 0;
}
void write_log_entry( char file[], char page[] )
{
//cout << "File = [" << file << "] page = [" << page << "]" << "\n";
//cout.flush();
ofstream inf( file, ios::app );
//inf.open( file, ios::out );
if ( !inf.fail() )
{
time_t t;
time( &t);
char *str = ctime( &t ); str[24] = '\0';
inf << setiosflags( ios::left );
inf << setw(24) << str << " " <<
setw(10) << (page!=NULL? page : (char*)"Unknown" ) << " " <<
setw(18) << getenv_n("REMOTE_ADDR") << " " <<
setw(20) << getenv_n("REMOTE_HOST") << "\n";
// setw(20) << getenv_n("REMOTE_USER") << "\n";
}
}
void gif_output( char gif[] )
{
char square [] = {
'G', 'I', 'F', '8', '9', 'a',
0002, 0000, 0002, 0000, 0263, 0000, 0000, 0000, 0000, 0000,
0277, 0000, 0000, 0000, 0277, 0000, 0277, 0277,
0000, 0000, 0000, 0277, 0277, 0000, 0277, 0000,
0277, 0277, 0300, 0300, 0300, 0200, 0200, 0200,
0377, 0000, 0000, 0000, 0377, 0000, 0377, 0377,
0000, 0000, 0000, 0377, 0377, 0000, 0377, 0000,
上一篇:CGI教程(9)编写安全的CGI脚本
下一篇:CGI教程(7)解码数据发送给CGI脚本
|