Tips

HTTPヘッダーおよびクッキーの抽出

日付2011/06/20
ID76339 (英語原文参照)
バージョン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

このようにしておけば, シンプルなコードで目的のクッキーを読み取ることができます。