Skip to main content

Cookie の保存と使用

このページでは、CSP ベースの Web アプリケーション内での Cookie の保存および使用方法について説明します。

Cookie は、クライアント・ブラウザ内に格納される名前と値のペアです。クライアントからの後続の要求すべてには、それより前のすべての Cookie の値が含まれます。

Cookie 内に情報を格納すると、セッションの終了後に覚えておきたい情報がある場合に便利です (既定ではブラウザが閉じると Cookie は終了するため、これを行うには有効期限を設定する必要があります)。例えば、Cookie にユーザ名を保存しておくと、後続のセッションでこの情報を再度入力する必要がなくなります。

Cookie の保存

Cookie を保存するには、以下の例に示すように %response オブジェクトSetCookie() メソッドを使用します。

 Do %response.SetCookie("UserName",name)

Cookie 定義には、以下の形式で有効期限とパスを含めることができます。

 Do %response.SetCookie("NAME","VALUE",expireData,path)

空白の expireData フィールドは、メモリ内の Cookie を定義します (現在のセッションでのみ利用できます)。ただし、expireData フィールドに値を指定すると、これは指定された日時に削除される永続的な Cookie になります。expireData フィールドの形式は、Wdy, DD-Mon-YYYY HH:MM:SS GMT です。例えば、Wednesday, 24-Mar-2024 18:12:00 GMT のようになります。

詳細は、クラス・リファレンスの "%CSP.ResponseOpens in a new tab" を参照してください。

SameSite 属性

Cookie の作成時に、SameSite 引数を指定できます。この引数は、サードパーティ・アプリケーションに関連する Cookie をアプリケーションでどのように処理するかを指定します (クロスサイト・リクエストともいいます)。この引数は、Web アプリケーションによって指定される既定の SameSite の値をオーバーライドします。

Cookie の SameSite の値を [None] に指定する場合は、HTTPS 接続を使用する必要があります。

Cookie へのアクセス

Cookie は、%request オブジェクトCookies プロパティにあります。このプロパティは多次元プロパティで、その添え字が Cookie の名前です。

%request オブジェクトは、Cookie のカウントや反復処理を行う方法も提供します。"%CSP.RequestOpens in a new tab" の "GetCookie()"、"NextCookie()"、および "CountCookie()" を参照してください。例えば、以下の単純なページ・クラスは、すべての Cookie とその値を表示します。

Class Sample.CookieDemo Extends %CSP.Page
{

ClassMethod OnPage() As %Status
{
   Set html="<!DOCTYPE html>"
           _"<html lang=""en"" dir=""ltr"">"
           _"<body>"
           _"<p>COOKIES:</p>" 
           _"<ul>"

   Set cookie=%request.NextCookie("")
   While cookie'="" { 
      For count=1:1:%request.CountCookie(cookie) { 
         Set html=html_"<li>"_cookie_" - "
                      _..EscapeHTML(%request.GetCookie(cookie,count))
                      _"</li>" 
       }
       Set cookie=%request.NextCookie(cookie)
   } 
   Set html=html_"</ul>"
                _"</body>"
                _"</html>"
 
   Write html
   Quit $$$OK
}

}
FeedbackOpens in a new tab