HTTPヘッダーおよびクッキーの抽出
日付 | 2011/06/20 |
---|---|
ID | 76339 (英語原文参照) |
バージョン | v12 |
プラットフォーム | Mac/Win |
Webクッキー(ブラウザクッキーあるいはHTTPクッキー)とは, Webブラウザがユーザーのコンピューターに保存しているテキストデータで, 認証・サイトのお気に入り設定・ショッピングカートの内容・セッション管理など, リクエスト間でテキストデータを維持することにより, さまざまな役割を果たしています。
クッキーはリクエストのHTTPヘッダーとして送受信されています。4Dの場合, この値はGET HTTP HEADERコマンドで受け取ることができます。特定のヘッダーだけを取り出すのであれば, 下記のようなメソッドがあると便利かもしれません。
// Method: UTIL_WEB_GetHeaderVar // Description // Return the value of the web header request // // Input // $1 - Name of the Header // Output // $0 - Value of the Header // ---------------------------------------------------- C_TEXT($0;$1;$headerName_t) C_LONGINT($foundat_l) If (Type(web_requestHeaderNames_at)#Text array) ARRAY TEXT(web_requestHeaderNames_at;0) ARRAY TEXT(web_requestHeaderValues_at;0) End if If (Size of array(web_requestHeaderNames_at)=0) GET HTTP HEADER(web_requestHeaderNames_at;web_requestHeaderValues_at) End if If (Count parameters>=1) $headerName_t:=$1 $foundat_l:=Find in array(web_requestHeaderNames_at;$headerName_t) If ($foundat_l#-1) $0:=web_requestHeaderValues_at{$foundat_l} End if End if
複数の情報が連結されたテキストであるクッキーから特定の値だけを取り出したい場合, 下記のようなメソッドで解析することができます。
// Method: UTIL_WEB_GetCookie // Description // Get a cookie value for the given cookie name // // Input // $1 - Cookie name // Output // $0 - Cookie value // ---------------------------------------------------- C_TEXT($1;$targetCookie_t) C_TEXT($0;$cookies_t) C_LONGINT($position_l) If (Count parameters>=1) $targetCookie_t:=$1 // *** Get all Cookie values in one string $cookies_t:=UTIL_WEB_GetHeaderVar ("Cookie") If (Length($cookies_t)>0) // *** Remove all string from the beginning up to the cookie keyword $position_l:=Position($targetCookie_t;$cookies_t) If ($position_l>0) $cookies_t:=Delete string($cookies_t;1;$position_l) End if // *** Remove all string after the next semicolon $position_l:=Position(";";$cookies_t) If ($position_l>0) $cookies_t:=Substring($cookies_t;1;$position_l-1) End if // *** Remove all string from the begining up to the = sign $position_l:=Position("=";$cookies_t) If ($position_l>0) $0:=Delete string($cookies_t;1;$position_l) End if End if End if
このようにしておけば, シンプルなコードで目的のクッキーを読み取ることができます。