Latest web development tutorials

C ++ Web-Programmierung

Was ist CGI?

  • Common Gateway Interface (CGI) ist ein Standard, der definiert, wie Informationen zwischen dem Web-Server und Client-Side-Scripting ausgetauscht wird.
  • CGI-Spezifikation wird derzeit von der NCSA, NCSA CGI beibehalten wird wie folgt definiert:
  • Common Gateway Interface (CGI) ist ein Gateway für externe Programme mit Informationen-Server (wie HTTP-Server) Docking-Interface-Standard.
  • Die aktuelle Version ist CGI / 1.1, CGI / 1.2 Version voran.

Web-Browser

Um besser das Konzept der CGI verstehen, lassen Sie uns auf einen Hyperlink klicken, wird eine bestimmte Seite oder URL zu finden, und zu sehen, was passiert.

  • Ihr Browser verbindet auf dem HTTP-Web-Server und fordert eine URL, das heißt, den Dateinamen.
  • Web-Server löst die URL, und finden Sie den Dateinamen. Wenn Sie die angeforderte Datei, Web-Server finden Sie die Datei zurück an den Browser senden, da sonst eine Fehlermeldung senden an, dass Sie eine falsche Datei anfordern.
  • Web-Browser eine Antwort von dem Web-Server zu erhalten, und auf der Grundlage der Antwort erhalten Sie eine Datei oder eine Fehlermeldung angezeigt werden soll.

Doch so einen HTTP-Server aufzubauen, unabhängig davon, wann ein Dateiverzeichnis zu beantragen, der HTTP-Server sendet die Datei nicht zurück, sondern in Form von Programmausführung und die Durchführung der Ausgabe erzeugt wird, zurück an den Browser-Anzeige gesendet aus.

Common Gateway Interface (CGI) ist, um eine Anwendung zu machen (CGI-Programme oder CGI-Skripten genannt) mit Servern Web zu arbeiten und Kunden interagieren Standardprotokolle. Diese CGI-Programme verwenden können, Python, Perl, Shell, C oder C ++, etc. vorzubereiten.

CGI-Diagramm

Die folgende Abbildung zeigt die CGI-Architektur:

CGI-Architektur

Web-Server-Konfiguration

Bevor Sie die CGI-Programmierung zu machen, stellen Sie sicher, dass Ihr Webserver CGI unterstützt, und konfiguriert wurde CGI-Programme zu handhaben. Alle CGI-Programme durch den HTTP-Server ausgeführt wird, haben vorkonfiguriert Verzeichnis. Dieses Verzeichnis CGI-Verzeichnis genannt, durch Konvention benannt / var / www / cgi-bin. Obwohl CGI ausführbare Datei C ++, sondern durch Konvention ist es die Erweiterung.cgi.

Standardmäßig würde Apache Web-Server in das Verzeichnis / var / www / cgi-bin in das CGI-Programm ausgeführt werden, konfiguriert. Wenn Sie ein anderes Verzeichnis angeben möchten, CGI-Skripte ausführen, können Sie den folgenden Abschnitt in der Datei httpd.conf ändern:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>
 
<Directory "/var/www/cgi-bin">
Options All
</Directory>

Hier gehen wir davon aus Sie bereits einen Web-Server haben und erfolgreich ausgeführt werden kann, Sie CGI-Programme ausführen können, wie Perl oder Shell und dergleichen.

Das erste CGI-Programm

Betrachten Sie das folgende C ++ Programm:

#include <iostream>
using namespace std;
 
int main ()
{
    
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Hello World - 第一个 CGI 程序</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Kompilieren Sie den vorherigen Code wird die ausführbare Datei cplusplus.cgi genannt, und diese Datei in / var / www / cgi-bin-Verzeichnis gespeichert. Bevor Sie das CGI - Programm ausgeführt wird , verwenden Sie bitte denchmod 755 cplusplus.cgi UNIX - Befehl den Dateimodus zu ändern, stellen Sie sicher , dass die Datei ausführbar ist.Zugang ausführbare Datei, erhalten Sie die folgende Ausgabe:

Hallo Welt! Das ist mein erstes CGI-Programm

Die obige C ++ Programm ist ein einfaches Programm, das auf STDOUT-Ausgabedatei geschrieben wird auf dem Bildschirm angezeigt. Dabei ist es bemerkenswert , dass die erste Zeile der AusgabeContent-type: text / html \ r \ n \ r \ n.Diese Linie wird an den Browser zurückgeschickt, und dazu bestimmt, im Browser-Fenster Inhaltstyp angezeigt werden. Sie müssen die grundlegenden Konzepte der CGI verstehen, um so eine weitere Python zu verwenden komplexere CGI-Programm zu schreiben. C ++ CGI-Programm kann mit anderen externen Systemen (wie RDBMS) verwendet werden, zu interagieren.

HTTP-Header-Informationen

Line -Content-type: text / html \ r \ n \ r \ n ist ein integraler Bestandteil des HTTP - Header - Informationen, wird sie an den Browser gesendet, um den Inhalt der Seite besser zu verstehen.In Form von HTTP-Header-Informationen ist wie folgt:

HTTP 字段名称: 字段内容
 
例如
Content-type: text/html\r\n\r\n

Es gibt weitere wichtige HTTP-Header-Informationen, werden diese oft in Ihrem CGI-Programmierung verwendet werden.

头信息 描述
Content-type: MIME 字符串,定义返回的文件格式。例如 Content-type:text/html。
Expires: Date 信息变成无效的日期。浏览器使用它来判断一个页面何时需要刷新。一个有效的日期字符串的格式应为 01 Jan 1998 12:00:00 GMT。
Location: URL 这个 URL 是指应该返回的 URL,而不是请求的 URL。你可以使用它来重定向一个请求到任意的文件。
Last-modified: Date 资源的最后修改日期。
Content-length: N 要返回的数据的长度,以字节为单位。浏览器使用这个值来表示一个文件的预计下载时间。
Set-Cookie: String 通过string设置 cookie。

CGI-Umgebungsvariablen

Alle CGI-Programme können die folgenden Umgebungsvariablen zugreifen. Diese Variablen als CGI-Programme zu schreiben spielen eine sehr wichtige Rolle.

变量名 描述
CONTENT_TYPE 内容的数据类型。当客户端向服务器发送附加内容时使用。例如,文件上传等功能。
CONTENT_LENGTH 查询的信息长度。只对 POST 请求可用。
HTTP_COOKIE 以键 & 值对的形式返回设置的 cookies。
HTTP_USER_AGENT 用户代理请求标头字段,递交用户发起请求的有关信息,包含了浏览器的名称、版本和其他平台性的附加信息。
PATH_INFO CGI 脚本的路径。
QUERY_STRING 通过 GET 方法发送请求时的 URL 编码信息,包含 URL 中问号后面的参数。
REMOTE_ADDR 发出请求的远程主机的 IP 地址。这在日志记录和认证时是非常有用的。
REMOTE_HOST 发出请求的主机的完全限定名称。如果此信息不可用,则可以用 REMOTE_ADDR 来获取 IP 地址。
REQUEST_METHOD 用于发出请求的方法。最常见的方法是 GET 和 POST。
SCRIPT_FILENAME CGI 脚本的完整路径。
SCRIPT_NAME CGI 脚本的名称。
SERVER_NAME 服务器的主机名或 IP 地址。
SERVER_SOFTWARE 服务器上运行的软件的名称和版本。

Die folgende Liste zeigt alle CGI-Programme CGI-Variablen.

#include <iostream>
#include <stdlib.h>
using namespace std;

const string ENV[ 24 ] = {                 
        "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",   
        "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",             
        "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",         
        "HTTP_HOST", "HTTP_USER_AGENT", "PATH",            
        "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",      
        "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
        "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",      
        "SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",     
        "SERVER_SIGNATURE","SERVER_SOFTWARE" };   

int main ()
{
    
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 环境变量</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";

   for ( int i = 0; i < 24; i++ )
   {
       cout << "<tr><td>" << ENV[ i ] << "</td><td>";
       // 尝试检索环境变量的值
       char *value = getenv( ENV[ i ].c_str() );  
       if ( value != 0 ){
         cout << value;                                 
       }else{
         cout << "环境变量不存在。";
       }
       cout << "</td></tr>\n";
   }
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

C ++ CGI-Bibliothek

In einem realen Beispiel müssen Sie viele Operationen, die durch CGI-Programme auszuführen. Es ist ein Programm , das speziell für C ++ geschrieben CGI - Bibliothek, wir können ftp://ftp.gnu.org/gnu/cgicc/~~V herunterladen diese CGI - Bibliothek, die Bibliothek und installiert in Übereinstimmung mit den folgenden Schritten:

$tar xzf cgicc-X.X.X.tar.gz 
$cd cgicc-X.X.X/ 
$./configure --prefix=/usr 
$make
$make install

Sie können auf die Schaltfläche C ++ die CGI - Lib die Dokumentation , sehen Bibliothek Dokumente.

GET und POST-Methoden

Sie haben möglicherweise eine solche Situation auftreten, wenn Sie einige Informationen aus dem Browser an den Web-Server muss passieren, und schließlich an das CGI-Programm übergeben. Typischerweise Methoden GET und POST sind Browser gibt zwei Möglichkeiten, diese Informationen an den Web-Server zu verwenden.

Verwenden Sie die GET-Methode Informationen weitergeben

GET Methode, um die Benutzerinformationen verschlüsselt an die Seite Anforderung angefügt zu senden. Seiten und codierte Information durch Zeichen getrennt, wie folgt ?:

http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2

GET-Methode ist die Standardmethode vom Browser an den Web-Server die Informationsübertragung, ist es eine lange Reihe von String in der Adressleiste des Browsers erzeugt wird. Wenn ein Passwort oder andere vertrauliche Informationen, die Sie an den Server, verwenden Sie nicht die GET-Methode. GET-Methode ist in der Größe, in einer Übertragungsanforderung Zeichenfolge bis zu 1024 Zeichen beschränkt.

Wenn Sie die GET-Methode verwenden, ist die QUERY_STRING HTTP-Header verwenden, um Informationen zu übertragen, verwenden Sie die Umgebungsvariable QUERY_STRING in CGI-Programmen zugänglich.

Sie können in der URL der einfachen Verbindung mit dem Schlüssel halten, können Sie auch HTML-GET-Methode <FORM> -Tag zur Übertragung von Informationen verwenden.

Einfache URL Beispiele: Get-Methode

Hier ist eine einfache URL, GET-Methode unter Verwendung von zwei Werten passieren Programm hello_get.py.

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

Die folgenden Beispiele erzeugencpp_get.cgi CGI - Programm zur Verarbeitung der von dem Web - Browser gegebenen Eingabe.Durch die Verwendung der C ++ CGI-Bibliothek, können Sie einfach die Informationsübertragung zugreifen:

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>  

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
   
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>使用 GET 和 POST 方法</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "名:" << **fi << endl;  
   }else{
      cout << "No text entered for first name" << endl;  
   }
   cout << "<br/>\n";
   fi = formData.getElement("last_name");  
   if( !fi->isEmpty() &&fi != (*formData).end()) {  
      cout << "姓:" << **fi << endl;  
   }else{
      cout << "No text entered for last name" << endl;  
   }
   cout << "<br/>\n";

   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Nun kompilieren Sie das obige Programm wie folgt:

$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc

Generieren Sie cpp_get.cgi, und legen Sie sie in das CGI-Verzeichnis und versuchen Sie den folgenden Link zur Verfügung:

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

Daraus ergeben sich die folgenden Ergebnisse:

名:ZARA 
姓:ALI 

Beispiele für einfache Form: Methode GET

Hier ist ein einfaches Beispiel, HTML-Formulare mit und senden, um die beiden Werte geht. Wir werden die gleichen CGI-Skript cpp_get.cgi verwenden, um die Eingabe zu verarbeiten.

<form action="/cgi-bin/cpp_get.cgi" method="get">
名:<input type="text" name="first_name">  <br />
 
姓:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>

Hier ist die aktuelle Ausgabe des Formulars, den Vor- und Nachnamen eingeben, dann klicken Sie auf den Absenden-Button um die Ergebnisse anzuzeigen.

Mit Hilfe der POST-Methode zur Übertragung von Informationen

Eine zuverlässigere Methode, um Informationen an das CGI-Programm vorbei ist POST-Methode. Dieses Verfahren zum Verpacken von Informationen mit dem GET-Verfahren auf die gleiche Weise, außer dass es nicht die Nachricht als eine Textzeichenfolge in der URL? Nachdem weitergegeben werden, aber es in einer separaten Nachricht in Form von Liefer setzen. Die Nachricht wird in Form von CGI-Skripten in die Standardeingabe übergeben.

Wir verwenden cpp_get.cgi auch POST-Methode zu behandeln. Lassen Sie uns das gleiche Beispiel zu nehmen, auf die Verwendung von HTML-Formularen passieren und Taste zwei Werte vorzulegen, aber dieses Mal werden wir nicht mit der GET-Methode, sondern die POST-Methode, wie folgt:

<form action="/cgi-bin/cpp_get.cgi" method="post">
名:<input type="text" name="first_name"><br />
姓:<input type="text" name="last_name" />
 
<input type="submit" value="提交" />
</form>

CGI-Programm für die Datenübertragung an die Box

Wenn Sie mehrere Optionen zur Auswahl stehen, verwenden wir die Kontrollkästchen.

Der folgende HTML-Code-Beispiel ist eine Form mit zwei Kontrollkästchen:

<form action="/cgi-bin/cpp_checkbox.cgi" 
         method="POST" 
         target="_blank">
<input type="checkbox" name="maths" value="on" /> 数学
<input type="checkbox" name="physics" value="on" /> 物理
<input type="submit" value="选择学科" />
</form>

Der folgende C ++ Programm cpp_checkbox.cgi Skript generieren, um Web-Browser kann durch die Box gegeben eingeben.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
   bool maths_flag, physics_flag;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递复选框数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   maths_flag = formData.queryCheckbox("maths");
   if( maths_flag ) {  
      cout << "Maths Flag: ON " << endl;  
   }else{
      cout << "Maths Flag: OFF " << endl;  
   }
   cout << "<br/>\n";

   physics_flag = formData.queryCheckbox("physics");
   if( physics_flag ) {  
      cout << "Physics Flag: ON " << endl;  
   }else{
      cout << "Physics Flag: OFF " << endl;  
   }
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Übertragen Sie Daten an das CGI-Programm der Radiobutton

Wenn nur noch eine Option zu wählen, verwenden wir Radio-Buttons.

Der folgende HTML-Code-Beispiel ist eine Form mit zwei Radio-Buttons:

<form action="/cgi-bin/cpp_radiobutton.cgi" 
         method="post" 
         target="_blank">
<input type="radio" name="subject" value="maths" 
                                    checked="checked"/> 数学 
<input type="radio" name="subject" value="physics" /> 物理
<input type="submit" value="选择学科" />
</form>

Der folgende C ++ Programm cpp_radiobutton.cgi Skript erzeugen, um den Eingang Web-Browser über das Optionsfeld von zu handhaben.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递单选按钮数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("subject");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Radio box selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Übertragen Sie Daten an ein CGI-Programm Textbereich

CGI-Programm, wenn Sie mehrere Textzeilen übertragen müssen, verwenden wir das TEXTAREA- Element.

Der folgende HTML-Code-Beispiel ist eine Form mit TEXTAREA- Box:

<form action="/cgi-bin/cpp_textarea.cgi" 
         method="post" 
         target="_blank">
<textarea name="textcontent" cols="40" rows="4">
请在这里输入文本...
</textarea>
<input type="submit" value="提交" />
</form>

Der folgende C ++ Programm cpp_textarea.cgi Skript erzeugen, um die Eingabe durch den Web-Browser, den Textbereich gegeben zu behandeln.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递文本区域数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("textcontent");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Text Content: " << **fi << endl;  
   }else{
      cout << "No text entered" << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Drop-Down-Box-Daten an das CGI-Programm zu übergeben

Wenn es mehrere Optionen zur Verfügung stehen, kann aber nur ein oder zwei Optionen wählen, verwenden wir das Dropdown-Feld.

Der folgende HTML-Code-Beispiel ist eine Form mit einem Drop-Down-Box:

<form action="/cgi-bin/cpp_dropdown.cgi" 
                       method="post" target="_blank">
<select name="dropdown">
<option value="Maths" selected>数学</option>
<option value="Physics">物理</option>
</select>
<input type="submit" value="提交"/>
</form>

Der folgende C ++ Programm cpp_dropdown.cgi Skript erzeugen, um den Eingang Web-Browser über Drop-Down-Box gegeben zu behandeln.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递下拉框数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("dropdown");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Value Selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Verwenden von Cookies in CGI,

HTTP-Protokoll ist ein zustandsloses Protokoll. Aber für eine Business-Website, braucht es Sitzungsinformationen zwischen den verschiedenen Seiten zu halten. Zum Beispiel endet ein Benutzer nach Abschluss der mehreren Schritten Registrierungsseite. Doch wie die Sitzung des Benutzers Informationen auf jeder Seite zu halten.

In vielen Fällen ist die Verwendung von Cookies für die Ausübung einer besseren Besuchererfahrung oder Website-Statistiken erforderlichen Informationen Informationen über Benutzereinstellungen, Kauf, Provisionen und andere effektivste Methode zu erinnern und zu verfolgen.

So funktioniert es

Server in Form eines Cookies, einige Daten zu den Browser des Besuchers zu senden. Wenn der Browser das Cookie akzeptiert, wird das Cookie als Klartext auf einem Besucherfestplatte aufgezeichnet gespeichert werden. Jetzt, wo die Besucher auf eine andere Seite auf der Website, ruft den Cookie. Sobald Sie das Cookie finden, weiß der Server, was gespeichert wird.

Ein Cookie ist eine reine Textdatensätze, fünf Felder mit variabler Länge mit:

  • Gültig bis: Cookie Ablaufdatum.Wenn dieses Feld leer gelassen wird, verfällt Cookie, wenn der Besucher den Browser beendet.
  • Domain: Website Domain - Namen.
  • Pfad: Legen Sie den Pfad Cookie - Verzeichnis oder Seite.Wenn Sie das Cookie von einem beliebigen Verzeichnis oder Seite abgerufen werden soll, kann dieses Feld leer gelassen werden.
  • Sicher: Wenn dieses Feld das Wort "sicher" enthält, dann kann das Cookie über einen sicheren Server abgerufen werden.Wenn dieses Feld leer gelassen wird, dass keine Einschränkungen bestehen.
  • Name = Wert: Cookie in Form von Schlüssel-Wert - Paare gesetzt und erhalten werden.

Cookies setzen

Senden von Cookies an den Browser ist sehr einfach. Diese Cookies werden vor dem Content-type Feld und HTTP-Header zusammen gesendet werden. Angenommen, Sie Benutzer-ID und Passwort für die Cookies zu setzen, Cookies Schritte sind wie folgt:

#include <iostream>
using namespace std;

int main ()
{
 
   cout << "Set-Cookie:UserID=XYZ;\r\n";
   cout << "Set-Cookie:Password=XYZ123;\r\n";
   cout << "Set-Cookie:Domain=www.w3cschool.cc;\r\n";
   cout << "Set-Cookie:Path=/perl;\n";
   cout << "Content-type:text/html\r\n\r\n";

   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   cout << "设置 cookies" << endl;  
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Aus diesem Beispiel haben wir gelernt, wie man Cookies zu setzen. Wir verwenden dieSet-Cookie - HTTP- Header - Cookies zu setzen.

Hier sind einige der Eigenschaften von Cookies gesetzt ist optional, wie Ablaufdatum, Domain und Pfad. Es ist erwähnenswert, diese Option in der Zeile"Content-type gesendet werden: text / html\ r \ n \ r \n, bevor festgelegt wird.

Kompilieren Sie das obige Programm, das setcookies.cgi erzeugt, und versuchen Sie den folgenden Link verwenden Cookies zu setzen. Es wird bis zu vier Cookies auf Ihrem Computer:

/cgi-bin/setcookies.cgi

Erhalten Sie Plätzchen

Cookies werden alle Einstellungen abzurufen sehr einfach sind. Cookies werden in der CGI-Umgebungsvariablen HTTP_COOKIE gespeichert sind, und deren Form gespeichert ist, wie folgt:

key1=value1;key2=value2;key3=value3....

Das folgende Beispiel zeigt, wie Cookies zu erhalten.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc cgi;
   const_cookie_iterator cci;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // 获取环境变量
   const CgiEnvironment& env = cgi.getEnvironment();

   for( cci = env.getCookieList().begin();
        cci != env.getCookieList().end(); 
        ++cci )
   {
      cout << "<tr><td>" << cci->getName() << "</td><td>";
      cout << cci->getValue();                                 
      cout << "</td></tr>\n";
   }
   cout << "</table><\n";
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Nun kompilieren das obige Programm getcookies.cgi erzeugt, und versuchen Sie den folgenden Link verwenden, um alle verfügbaren Cookies auf Ihrem Computer zu erhalten:

/cgi-bin/getcookies.cgi

Dadurch wird eine Liste erzeugen, die auf einem Gerät und Ihr Computer die anderen vier Cookies Cookies zeigt:

UserID XYZ 
Password XYZ123 
Domain www.w3cschool.cc 
Path /perl 

Beispiele für das Hochladen von Dateien

Um eine Datei zu laden, muss HTML - Formular enctype Attribut aufmultipart / form-data.Input-Tag mit dem Dateityp wird eine Schaltfläche "Durchsuchen" erstellen.

<html>
<body>
   <form enctype="multipart/form-data" 
            action="/cgi-bin/cpp_uploadfile.cgi" 
            method="post">
   <p>文件:<input type="file" name="userfile" /></p>
   <p><input type="submit" value="上传" /></p>
   </form>
</body>
</html>

Die Ergebnisse dieses Codes ist die folgende Form:

Dokumente:

Hinweis: Das obige Beispiel wurde auf unseren Servern in gespeichert absichtlich deaktiviert Dateien hochzuladen.Sie können den obigen Code auf dem Server versuchen.

In der folgenden verwendet werden , um die Datei - Upload - Skriptcpp_uploadfile.cpp zu verarbeiten:

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc cgi;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的文件上传</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // 获取要被上传的文件列表
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // 在 cout 中发送数据类型
      cout << HTTPContentHeader(file->getDataType());
      // 在 cout 中写入内容
      file->writeToStream(cout);
   }
   cout << "<文件上传成功>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Das obige Beispiel ist zu schreiben Streamcout, aber Sie können die Datei - Stream öffnen und den Inhalt der hochgeladenen Datei in einer Datei auf der Zielposition.