SetCookie Actionの動作を確認する

OutSystemsで任意のCookieを設定するAPI SetCookieがHttpRequestHandler Extensionで提供されています。

公式ドキュメントだけでは、どんなCookieが発行されるかわからないので、実際に発行して確認してみました。あわせて、Integration Studioでソースも見ていきます。

動作確認環境

Platform Version:11.0.212.0

Service Studio Version:11.0.530.0

実際に設定されるCookie

まずは、Cookieの名前と値だけを設定するパターン

この設定をした場合、SetCookieによって設定されるResponse  Headerのset-cookieは、以下の通り。

set-cookie: Name1=dummy; path=/HousesoftBusiness/

渡していないpathが設定されています。この値はテストに使ったモジュール名ですね。デフォルトでもジュール名が設定されるということですね。

また、secureやhttponlyはついていませんね。実際、開発者ツールで確認すると、HTTP通信でも送信され、JavaScriptで設定されたCookieを操作できます。これらの設定項目については、ActionのInput Parameterにもないため、このAPIでは設定できません。

CookieExpirationSpanとCookiePathも設定するパターン

上の例に加えてCookieExpirationSpan(分単位の整数)とCookiePathを指定しました。

この呼び出しをしたときのResponse  Headerのset-cookie

Set-Cookie: Name1=dummy2; expires=Sat, 20-Jul-2019 17:23:21 GMT; path=/

設定した値が入っていますね。expiresは、実行時間+CookieExpirationSpan分を計算し、タイムゾーンを調整した値が入っています(GMTに変換されている)。

上の例でいうと、日本時間の16時台に処理を実行し、600分(10時間)のCookieExpirationSpanを設定したので02時。JSTからGMTに変換して(-9時間)17時になっています。

ソースコードをチェック

確認手順

HttpRequestHanlderはExtensionの形式で提供されているため、Integration Studioを介することで、C#コードによる実装を確認できます。

Service Studio内で参照したHttpRequestHandlerを右クリックし、Open ‘HttpRequestHandler’ Extensionを選択するとIntegration Studioが開きます。

次に環境に接続してツールバー右端のアイコン「Edit Source Code .NET」をクリックするとVisual Studioが立ち上がり、ソースを確認できます。

ソースコード(関数の実装部分)

HttpContext oHttpContext = HttpContext.Current;

HttpCookie oCookie = new HttpCookie(ssCookieName, ssCookieValue);

if (ssCookiePath.Length != 0) {
    oCookie.Path = ssCookiePath;
} else {
    oCookie.Path = "/" + AppInfo.GetAppInfo().eSpaceName + "/" + AppInfo.GetAppInfo().PtaPath;
}

if (ssCookieDomain.Length != 0) {
    oCookie.Domain = ssCookieDomain;
}

if (ssCookieExpirationSpan > 0) {
    DateTime dt = DateTime.Now;
    TimeSpan ts = new TimeSpan(0, 0, ssCookieExpirationSpan, 0);
    oCookie.Expires = dt.Add(ts);
}

&tab;oHttpContext.Response.SetCookie(oCookie);

ソースコードのコメント

まず、Cookieは.NET FrameworkのSystem.Web.HttpCookieを使って設定しているようですね。従って、Actionのパラメータにない値は、このクラスのでデフォルト値が使用されるはずです。

次に、CookiePathに何も設定していないとき、以下のコードによって/モジュール名/と言う形式が強制されていることがわかります。つまり、未設定にしても空白にならないわけですね。

“/” + AppInfo.GetAppInfo().eSpaceName + “/” + AppInfo.GetAppInfo().PtaPath;

AppInfoはOutSystemsのライブラリが提供している、アプリケーションに関係する情報を格納するクラスのようです。PtaPathが何を指しているのかは情報が見つかりませんでしたが、私がPEでテストしたときは、この部分は空白文字列でした。

ExpiresはDateTime.Nowで現在時刻を取得して、パラメータで渡した分数だけ後の値をとるシンプルな実装です。

全体にシンプルなコードなので、もしSecureやHttpOnlyを設定できるActionが欲しければ、このコードを自分で作ったExtensionにコピーして改変すれば簡単にできそう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする