CGI 란 무엇입니까?
CGI는 현재 NCSA에서 관리하고 있으며 CGI를 다음과 같이 정의합니다.
CGI(Common Gateway Interface), Common Gateway Interface는 HTTP 서버 등의 서버에서 실행되는 프로그램으로, 클라이언트의 HTML 페이지와 인터페이스를 제공합니다.
웹 브라우징
CGI 작동 방식을 더 잘 이해하기 위해 웹 페이지에서 링크나 URL을 클릭하는 프로세스부터 시작할 수 있습니다.
1. 브라우저를 사용하여 URL에 액세스하고 HTTP 웹 서버에 연결합니다.
2. 웹 서버는 요청 정보를 받은 후 URL을 구문 분석하여 액세스한 파일이 서버에 있는지 확인합니다. 파일이 있으면 파일 내용을 반환하고, 그렇지 않으면 오류 메시지를 반환합니다.
3. 브라우저는 서버로부터 정보를 받아 수신된 파일이나 오류 메시지를 표시합니다.
CGI 프로그램은 Python 스크립트, PERL 스크립트, SHELL 스크립트, C 또는 C++ 프로그램 등이 될 수 있습니다.
CGI 아키텍처 다이어그램
웹 서버 지원 및 구성
CGI 프로그래밍을 수행하기 전에 웹 서버가 CGI를 지원하고 CGI 처리기를 구성했는지 확인하십시오.
Apache는 CGI 구성을 지원합니다.
CGI 디렉터리를 설정합니다.
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
모든 HTTP 서버 실행 CGI 프로그램은 미리 구성된 디렉토리에 저장됩니다. 이 디렉토리를 CGI 디렉토리라고 하며 관례적으로 이름은 /var/www/cgi-bin입니다.
CGI 파일의 확장자는 .cgi이며 Perl은 .pl 확장자를 사용할 수도 있습니다.
기본적으로 Linux 서버 구성은 /var/www의 cgi-bin 디렉터리에서 실행됩니다.
CGI 스크립트를 실행하기 위해 다른 디렉토리를 지정하려면 다음과 같이 httpd.conf 구성 파일을 수정할 수 있습니다.
<Directory "/var/www/cgi-bin"> AllowOverride 없음 옵션 +ExecCGI 주문 허용, 거부 모두 허용</Directory>
.pl로 끝나는 Perl 스크립트 파일에 액세스할 수 있도록 AddHandler에 .pl 접미사를 추가합니다.
AddHandler cgi-script .cgi .pl .py
최초의 CGI 프로그램
아래에서는 test.cgi 파일을 생성하며 코드는 다음과 같습니다.
test.cgi 코드
#!/usr/bin/perl 인쇄 " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 ' <html> ' ; ' <헤드 > ' ; ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; ' </head> ' ; ' <본문 > ' ; ' <h2> 안녕하세요 </h2> ' ; ' <p>프로그래머 튜토리얼의 첫 번째 CGI 프로그램입니다. </p> ' ; 인쇄 ' </body> ' ; ' </html> ' 1 ; 그런 다음 브라우저를 통해 http://localhost/cgi-bin/test.cgi를 열면 출력 결과는 다음과 같습니다.
"Content-type: text/htmlrnrn" 스크립트 첫 번째 줄의 출력 콘텐츠가 브라우저로 전송되고 표시된 콘텐츠 유형이 "text/html"임을 브라우저에 알려줍니다.
HTTP 헤더
test.cgi 파일의 콘텐츠에 있는 "Content-type:text/html"은 브라우저에 파일의 콘텐츠 유형을 알려주기 위해 브라우저로 전송되는 HTTP 헤더의 일부입니다.
HTTP 헤더의 형식은 다음과 같습니다.
HTTP 필드 이름: 필드 콘텐츠
예를 들어:
컨텐츠 유형:텍스트/htmlrnrn
다음 표에서는 CGI 프로그램의 HTTP 헤더에 일반적으로 사용되는 정보를 소개합니다.
머리 | 설명하다 |
---|
콘텐츠 유형: | 엔터티에 해당하는 요청된 MIME 정보입니다. 예: 콘텐츠 유형:텍스트/html |
만료: 날짜 | 응답 만료 날짜 및 시간 |
위치: URL | 요청을 완료하거나 새 리소스를 식별하기 위해 수신자를 요청되지 않은 URL의 위치로 리디렉션하는 데 사용됩니다. |
최종 수정 날짜: 날짜 | 요청된 리소스의 마지막 수정 시간 |
콘텐츠 길이: N | 요청된 콘텐츠 길이 |
세트 쿠키: 문자열 | HTTP 쿠키 설정 |
CGI 환경 변수
모든 CGI 프로그램은 CGI 프로그램에서 중요한 역할을 하는 다음과 같은 환경 변수를 받습니다.
변수 이름 | 설명하다 |
---|
CONTENT_TYPE | 이 환경 변수의 값은 전달되는 정보의 MIME 유형을 나타냅니다. 현재 환경 변수 CONTENT_TYPE은 일반적으로 application/x-www-form-urlencoded입니다. 이는 데이터가 HTML 양식에서 가져온 것임을 나타냅니다. |
CONTENT_LENGTH | 서버와 CGI 프로그램 간의 정보 전송 방법이 POST인 경우 이 환경 변수는 표준 입력 STDIN에서 읽을 수 있는 유효한 데이터의 바이트 수입니다. 입력된 데이터를 읽을 때 이 환경 변수를 사용해야 합니다. |
HTTP_쿠키 | 클라이언트의 쿠키 콘텐츠. |
HTTP_USER_AGENT | 버전 번호나 기타 독점 데이터를 포함한 고객 브라우저 정보를 제공하십시오. |
PATH_INFO | 이 환경 변수의 값은 CGI 프로그램 이름 바로 뒤에 오는 다른 경로 정보를 나타냅니다. CGI 프로그램의 매개변수로 나타나는 경우가 많습니다. |
QUERY_STRING | 서버와 CGI 프로그램 간의 정보 전달 방법이 GET인 경우 이 환경 변수의 값은 전달되는 정보가 됩니다. 이 정보는 물음표 '?'로 구분된 CGI 프로그램 이름 뒤에 옵니다. |
REMOTE_ADDR | 이 환경 변수의 값은 위의 192.168.1.67과 같이 요청을 보내는 클라이언트의 IP 주소입니다. 이 값은 항상 존재합니다. 그리고 이는 웹 클라이언트가 웹 서버에 제공해야 하는 고유 식별자이며, 이는 CGI 프로그램에서 다양한 웹 클라이언트를 구별하는 데 사용될 수 있습니다. |
REMOTE_HOST | 이 환경 변수의 값에는 CGI 요청을 보낸 클라이언트의 호스트 이름이 포함됩니다. 쿼리하려는 쿼리가 지원되지 않는 경우 이 환경 변수를 정의할 필요가 없습니다. |
REQUEST_METHOD | 스크립트를 호출하는 방법을 제공합니다. HTTP/1.0 프로토콜을 사용하는 스크립트의 경우 GET 및 POST만 의미가 있습니다. |
SCRIPT_FILENAME | CGI 스크립트의 전체 경로 |
SCRIPT_NAME | CGI 스크립트의 이름 |
SERVER_NAME | 이는 웹 서버의 호스트 이름, 별칭 또는 IP 주소입니다. |
서버_소프트웨어 | 이 환경 변수의 값에는 CGI 프로그램을 호출하는 HTTP 서버의 이름과 버전 번호가 포함됩니다. 예를 들어 위의 값은 Apache/2.2.14(Unix)입니다. |
다음은 CGI 환경 변수를 출력하는 간단한 CGI 스크립트입니다.
예
#!/usr/bin/perl 인쇄 " 콘텐츠 유형: text/html n n " ; ' <meta
charset ="utf-8"> ' 인쇄 " <font size=+1>환경 변수:</font> n " ; ( 종류 열쇠 %ENV ) { 인쇄 " <b> $_ </b>: $ENV { $_ } <br> n " } 1 ; 파일 다운로드
Perl CGI를 통해 파일을 다운로드하려면 아래와 같이 다른 헤더 정보를 설정해야 합니다.
예
#!/usr/bin/perl # HTTP 헤더 인쇄 " 콘텐츠 유형:응용 프로그램/옥텟-스트림; 이름= " 파일 이름 " r n " ; 인쇄 " Content-Disposition: attachment; filename= " FileName " r n n " ; # 실제 파일 콘텐츠가 들립니다. 열려 있는 ( 파일 , " <파일 이름 " ) ; while ( 읽기 ( FILE , $buffer , 100 ) ) { 인쇄 ( " $ 버퍼 " ) } GET 방식을 사용하여 데이터 전송
GET 메소드는 인코딩된 사용자 정보를 서버로 전송합니다. 데이터 정보는 아래와 같이 "?"로 구분되어 요청된 페이지의 URL에 포함됩니다.
http://www.test.com/cgi-bin/test.cgi?key1=value1&key2=value2
GET 요청에 대한 몇 가지 추가 참고 사항:
GET 요청을 캐시할 수 있음
GET 요청은 브라우저 기록에 남아 있습니다.
GET 요청은 북마크에 추가할 수 있습니다.
민감한 데이터를 처리할 때 GET 요청을 사용하면 안 됩니다.
GET 요청에는 길이 제한이 있습니다
GET 요청은 데이터를 검색하는 데에만 사용해야 합니다.
간단한 URL 예: GET 메소드
다음은 GET 메소드를 사용하여 test.cgi 프로그램에 두 개의 매개변수를 보내는 간단한 URL입니다:
/cgi-bin/test.cgi?name=코더 튜토리얼&url=http://www.codercto.com
다음은 test.cgi 파일의 코드입니다:
예
#!/usr/bin/perl 현지의 ( $buffer , @pairs , $pair , $name , $value , %FORM ) # 텍스트 정보 읽기 $ENV { ' REQUEST_METHOD ' } = ~ tr / a - z / A - Z /; ( $ENV { ' 요청_방법 ' } eq " 얻다 " ) { $ buffer = $ENV { ' QUERY_STRING ' } ; # 이름/값 쌍 정보를 읽습니다. @pairs = 분할 ( /&/, $ buffer ) ; $pair ( @pairs ) { ( $name , $value ) = 분할 ( /=/, $pair ) ; $value =~ tr /+/ / ; $value =~ s / % ( .. ) / pack ( " C " , 16진수 ( $1 ) ) / 예 : $FORM { $name } = $ value } $name = $FORM { 이름 } ; $url = $ FORM { URL } ; " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 " <html> " ; 인쇄 " <헤드> " ; 인쇄 ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; " </head> " ; 인쇄 " <본문> " ; 인쇄 " <h2> $name URL: $url </h2> " ; 인쇄 " </body> " ; 인쇄 " </html> " 1 ; 브라우저를 확인하면 출력은 다음과 같습니다.
간단한 형식의 예: GET 메서드
다음은 GET 메소드를 사용하여 두 개의 데이터를 서버로 보내는 HTML 형식입니다. 제출된 서버 스크립트도 test.html 코드입니다.
test.html 파일 코드
< ! HTML > <html> <머리> < 메타 문자셋 = " utf-8 " > <title> 코더 튜토리얼 ( codercto.com ) </title> </ 머리 > <본문> < 양식 작업 = " /cgi-bin/test.cgi " method = " get " > 사이트 이름: < 입력 유형 = " 텍스트 " 이름 = " 이름 " > < br /> 사이트 URL: < 입력 유형 = " 텍스트 " 이름 = " url " /> < 입력 유형 = " 제출 " 값 = " 제출 " /> </form> </body> </html> 브라우저에서 실행 효과는 다음과 같습니다.
POST 메서드를 사용하여 데이터 전달
POST 방식을 사용하여 서버에 데이터를 전송하는 것이 더 안전하고 안정적입니다. 사용자 비밀번호와 같은 일부 민감한 정보는 데이터를 전송하기 위해 POST를 사용해야 합니다.
다음은 또한 브라우저가 제출한 POST 양식 데이터를 처리할 수 있는 test.cgi입니다.
test.cgi 코드
#!/usr/bin/perl 현지의 ( $buffer , @pairs , $pair , $name , $value , %FORM ) # 텍스트 정보 읽기 $ENV { ' REQUEST_METHOD ' } = ~ tr / a - z / A - Z /; ( $ENV { ' 요청_방법 ' } eq " 우편 " ) { 읽기 ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # 이름/값 쌍 정보를 읽습니다. @pairs = 분할 ( /&/, $ buffer ) ; $pair ( @pairs ) { ( $name , $value ) = 분할 ( /=/, $pair ) ; $value =~ tr /+/ / ; $value =~ s / % ( .. ) / pack ( " C " , 16진수 ( $1 ) ) / 예 : $FORM { $name } = $ value } $name = $FORM { 이름 } ; $url = $ FORM { URL } ; " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 " <html> " ; 인쇄 " <헤드> " ; 인쇄 ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; " </head> " ; 인쇄 " <본문> " ; 인쇄 " <h2> $name URL: $url </h2> " ; 인쇄 " </body> " ; 인쇄 " </html> " 1 ; 다음은 GET 메소드를 사용하여 두 개의 데이터를 서버로 보내는 HTML 형식입니다. 제출된 서버 스크립트도 test.html 코드입니다.
test.html 코드
< ! HTML > <html> <머리> < 메타 문자셋 = " utf-8 " > <title> 코더 튜토리얼 ( codercto.com ) </title> </ 머리 > <본문> < 형식 작업 = " /cgi-bin/test.cgi " method = " post " > 사이트명 : < 입력 유형 = " 텍스트 " 이름 = " 이름 " > < br /> 사이트 URL: < 입력 유형 = " 텍스트 " 이름 = " url " /> < 입력 유형 = " 제출 " 값 = " 제출 " /> </form> </body> </html> 브라우저에서 실행 효과는 다음과 같습니다.
CGI 프로그램을 통해 체크박스 데이터 전달
체크박스는 하나 이상의 옵션 데이터를 제출하는 데 사용됩니다. test.html 코드는 다음과 같습니다.
test.html 코드
< ! HTML > <html> <머리> < 메타 문자셋 = " utf-8 " > <title> 코더 튜토리얼 ( codercto.com ) </title> </ 머리 > <본문> < 형식 작업 = " /cgi-bin/test.cgi " 메소드 = " POST " 대상 = " _blank " > < 입력 유형 = " 체크박스 " 이름 = " 코덱토 " 값 = " 에 " /> 코더 튜토리얼 < 입력 유형 = " 체크박스 " 이름 = " 구글 " 값 = " 에 " /> 구글 < 입력 유형 = " 제출 " 값 = " 사이트 선택 " /> </form> </body> </html> 다음은 test.cgi 파일의 코드입니다:
test.cgi 코드
#!/usr/bin/perl 현지의 ( $buffer , @pairs , $pair , $name , $value , %FORM ) # 정보 읽기 $ENV { ' REQUEST_METHOD ' } = ~ tr / a - z / A - Z /; ( $ENV { ' 요청_방법 ' } eq " 우편 " ) { 읽기 ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # 이름/값 쌍 정보를 읽습니다. @pairs = 분할 ( /&/, $ buffer ) ; $pair ( @pairs ) { ( $name , $value ) = 분할 ( /=/, $pair ) ; $value =~ tr /+/ / ; $value =~ s / % ( .. ) / pack ( " C " , 16진수 ( $1 ) ) / 예 : $FORM { $name } = $ value } 만약에 ( $FORM { 코덱 } ) { $ codercto_flag = " 켜짐 " } else { $ codercto_flag = " 꺼짐 " ; 만약에 ( $FORM { 구글 } ) { $ google_flag = " 켜기 " } else { $ google_flag = " 꺼짐 " ; 인쇄 " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 " <html> " ; 인쇄 " <헤드> " ; 인쇄 ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; " </head> " ; 인쇄 " <본문> " ; 인쇄 " <h2> Coder Tutorial 선택 상태: $ codercto_flag </h2> " ; " <h2> Google 선택 상태: $ google_flag </h2> " ; " </body> " ; 인쇄 " </html> " 1 ; 브라우저에서 실행 효과는 다음과 같습니다.
CGI 프로그램을 통해 라디오 데이터 전달
Radio는 하나의 데이터만 서버에 전달합니다. test.html 코드는 다음과 같습니다.
test.html 코드
< ! HTML > <html> <머리> < 메타 문자셋 = " utf-8 " > <title> 코더 튜토리얼 ( codercto.com ) </title> </ 머리 > <본문> < 양식 작업 = " /cgi-bin/test.cgi " 방법 = " 게시 " 대상 = " _blank " > < 입력 유형 = " 라디오 " 이름 = " 사이트 " 값 = " 코덱토 " /> 코더 튜토리얼 < 입력 유형 = " 라디오 " 이름 = " 사이트 " 값 = " 구글 " /> 구글 < 입력 유형 = " 제출 " 값 = " 제출 " /> </form> </body> </html> test.cgi 스크립트 코드는 다음과 같습니다.
test.cgi 코드
#!/usr/bin/perl 현지의 ( $buffer , @pairs , $pair , $name , $value , %FORM ) # 정보 읽기 $ENV { ' REQUEST_METHOD ' } = ~ tr / a - z / A - Z /; ( $ENV { ' 요청_방법 ' } eq " 우편 " ) { 읽기 ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # 이름/값 쌍 정보를 읽습니다. @pairs = 분할 ( /&/, $ buffer ) ; $pair ( @pairs ) { ( $name , $value ) = 분할 ( /=/, $pair ) ; $value =~ tr /+/ / ; $value =~ s / % ( .. ) / pack ( " C " , 16진수 ( $1 ) ) / 예 : $FORM { $name } = $ value } $site = $ FORM { 사이트 } ; " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 " <html> " ; 인쇄 " <헤드> " ; 인쇄 ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; " </head> " ; 인쇄 " <본문> " ; 인쇄 " <h2> 선택한 웹사이트 $ site </h2> " ; " </body> " ; 인쇄 " </html> " 1 ; 브라우저에서 실행 효과는 다음과 같습니다.
CGI 프로그램을 통해 Textarea 데이터 전달
Textarea는 여러 줄의 데이터를 서버로 전송합니다. test.html 코드는 다음과 같습니다.
test.html 코드
< ! HTML > <html> <머리> < 메타 문자셋 = " utf-8 " > <title> 코더 튜토리얼 ( codercto.com ) </title> </ 머리 > <본문> < 양식 작업 = " /cgi-bin/test.cgi " 방법 = " 게시 " 대상 = " _blank " > < 텍스트 영역 이름 = " 텍스트 내용 " 열 = " 40 " 행 = " 4 " > 여기에 내용을 입력하십시오... </ textarea > < 입력 유형 = " 제출 " 값 = " 제출 " /> </form> </body> </html> test.cgi 스크립트 코드는 다음과 같습니다.
test.cgi 코드
#!/usr/bin/perl 현지의 ( $buffer , @pairs , $pair , $name , $value , %FORM ) # 정보 읽기 $ENV { ' REQUEST_METHOD ' } = ~ tr / a - z / A - Z /; ( $ENV { ' 요청_방법 ' } eq " 우편 " ) { 읽기 ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # 이름/값 쌍 정보를 읽습니다. @pairs = 분할 ( /&/, $ buffer ) ; $pair ( @pairs ) { ( $name , $value ) = 분할 ( /=/, $pair ) ; $value =~ tr /+/ / ; $value =~ s / % ( .. ) / pack ( " C " , 16진수 ( $1 ) ) / 예 : $FORM { $name } = $ value } $text_content = $FORM { 텍스트 콘텐츠 } ; " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 " <html> " ; 인쇄 " <헤드> " ; 인쇄 ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; " </head> " ; 인쇄 " <본문> " ; 인쇄 " <h2>입력 텍스트 내용은 다음과 같습니다: $ text_content </h2> " ; " </body> " ; 인쇄 " </html> " 1 ; 브라우저에서 실행 효과는 다음과 같습니다.
CGI 프로그램을 통해 드롭다운 데이터 전달
HTML 드롭다운 상자 코드는 다음과 같습니다.
test.html 코드
< ! HTML > <html> <머리> < 메타 문자셋 = " utf-8 " > <title> 코더 튜토리얼 ( codercto.com ) </title> </ 머리 > <본문> < 형식 작업 = " /cgi-bin/test.cgi " 방법 = " 게시 " 대상 = " _blank " > < 선택 이름 = " 드롭다운 " > < 옵션 값 = " 코덱토 " 선택됨 > 코더 튜토리얼 </ 옵션 > < 옵션 값 = " 구글 " > 구글 </ 옵션 > </select> < 입력 유형 = " 제출 " 값 = " 제출 " /> </form> </body> </html> test.cgi 스크립트 코드는 다음과 같습니다.
test.cgi 코드
#!/usr/bin/perl 현지의 ( $buffer , @pairs , $pair , $name , $value , %FORM ) # 정보 읽기 $ENV { ' REQUEST_METHOD ' } = ~ tr / a - z / A - Z /; ( $ENV { ' 요청_방법 ' } eq " 우편 " ) { 읽기 ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # 이름/값 쌍 정보를 읽습니다. @pairs = 분할 ( /&/, $ buffer ) ; $pair ( @pairs ) { ( $name , $value ) = 분할 ( /=/, $pair ) ; $value =~ tr /+/ / ; $value =~ s / % ( .. ) / pack ( " C " , 16진수 ( $1 ) ) / 예 : $FORM { $name } = $ value } $site = $FORM { 드롭 다운 } ; " 콘텐츠 유형:텍스트/html r n r n " ; 인쇄 " <html> " ; 인쇄 " <헤드> " ; 인쇄 ' <meta
charset ="utf-8"> ' 인쇄 ' <title>코더 튜토리얼(codercto.com) </title> ' ; " </head> " ; 인쇄 " <본문> " ; 인쇄 " <h2>
선택한 웹사이트는 $site </h2> " ; " </body> " ; 인쇄 " </html> " 1 ; 브라우저에서 실행 효과는 다음과 같습니다.
CGI에서 쿠키 사용
http 프로토콜의 가장 큰 단점은 사용자의 신원을 판단하지 않는다는 점인데, 이는 프로그래머에게 큰 불편을 안겨준다. 쿠키 기능의 등장은 이러한 단점을 보완한다.
쿠키는 고객이 스크립트에 접속할 때 고객의 브라우저를 통해 고객의 하드 드라이브에 기록 데이터를 기록하며, 다음 번 스크립트에 접속할 때 해당 데이터 정보를 불러와 신원 확인 기능을 수행하는 경우가 많습니다.
쿠키 구문
http 쿠키 전송은 파일 전송보다 빠른 http 헤더를 통해 구현됩니다. set-cookie 헤더의 구문은 다음과 같습니다.
쿠키 설정:이름=이름;만료=날짜;경로=경로;도메인=도메인;보안
name=name: 쿠키 값을 설정해야 합니다(name은 " ; " 및 " , "를 사용할 수 없음). " ; "를 사용하여 여러 이름 값을 구분합니다(예: name1=name1;name2=name2;name3=name3 ).
만료=날짜: 쿠키 유효 기간, 형식: 만료="Wdy,DD-Mon-YYYY HH:MM:SS"
path=path: 쿠키가 지원하는 경로를 설정합니다. path가 경로인 경우 쿠키는 이 디렉터리의 모든 파일과 하위 디렉터리에 적용됩니다. 예: path="/cgi-bin/" 쿠키가 적용됩니다. 예를 들어 path="/cgi-bin/cookie.cgi"입니다.
domain=domain: 쿠키에 유효한 도메인 이름(예: domain="www.codercto.com")
secure: 이 플래그가 제공되면 쿠키는 SSL 프로토콜을 사용하는 https 서버를 통해서만 전달될 수 있음을 의미합니다.
쿠키 수신은 환경 변수 HTTP_COOKIE를 설정하여 이루어집니다. CGI 프로그램은 이 변수를 검색하여 쿠키 정보를 얻을 수 있습니다.
쿠키 설정
쿠키 설정은 매우 간단합니다. 쿠키는 http 헤더에 별도로 전송됩니다. 다음 예에서는 UserID, Password를 설정하고 쿠키에 만료됩니다.
예
#!/usr/bin/perl 인쇄 " Set-Cookie:UserID=XYZ; n " ; 인쇄 " Set-Cookie:Password=XYZ123; n " ; 인쇄 " Set-Cookie:Expires=Tuesday, 31-Dec-2017 23:12:40 GMT " ; n " ;print " 세트 - 쿠키 : 도메인 = www . codercto .com ; n " ;print " 세트 - 쿠키 : 경로 =/ perl ; n " ;print " 콘텐츠 - 유형 : text / html r n r n " ;.......다른 HTML 콘텐츠 쿠키 찾기
쿠키 정보 검색 페이지는 매우 간단합니다. 쿠키 정보는 CGI 환경 변수 HTTP_COOKIE에 저장됩니다.
예
#!/usr/bin/perl $ rcvd_cookies = $ ENV { ' HTTP_COOKIE ' } ; @cookies = 분할 / , $ rcvd_cookies ; $쿠키 ( @쿠키 ) { ( $key , $val ) = 분할 ( /=/, $cookie ) # 첫 번째 =에서 분할합니다. $ key = ~ s / ^ s + // ; $ val = ~ s / s + $ // ; /; 만약에 ( $키 eq " 사용자ID " ) { $user_id = $val } elsif ( $ 키 eq " 비밀번호 " ) { $password = $ 발 } } 인쇄 " 사용자 ID = $user_id n " ; 인쇄 " 비밀번호 = $password n " ; 위 예제의 출력 결과는 다음과 같습니다.
사용자 ID = XYZPassword = XYZ123
CGI 모듈
Perl은 많은 내장 CGI 모듈을 제공하며 다음 두 가지가 일반적으로 사용됩니다.
CGI 모듈
버클리 cgi-lib.pl