OutSystemsのセッションタイムアウト時間の変更は、通常は、ASP.NETの設定ファイル(machine.configかweb.config)で行われます。
しかし、トラブルシュート等のために開発側のエンジニアだけで変更したいこともあると思います。
今回はそういう目的に使えるForgeのコンポーネントを紹介します。
簡単なロジックなので、Visual Studioさえあれば、Forgeをインストールできない環境でも同じExtensionが作れるはずです。
動作確認環境
Personal Environment(Version 11.7.3 (Build 5968))
Service Studio(Version 11.6.30)
Browser Session Timeout(Version 2.0.1)
Forgeコンポーネント
Browser Session Timeout
https://www.outsystems.com/forge/component-overview/1365/browser-session-timeout
C#で書かれたExtensionです。
この記事中で出てくるAction名はこのコンポーネントのものです。
タイムアウト値を変更する
現在のセッションのタイムアウト値を変更する、SetSessionTimeOut Actionを使います。
パラメータは、現在のセッションに設定したいタイムアウト値を分数で指定します。このタイムアウト分の時間、リクエストをしないでいると、そのセッションはタイムアウトです。
1分でタイムアウトさせる例。
現在のセッションのタイムアウト値を確認するときは、GetSessionTimeOut Action。
即座にセッションを無効にする
パラメータのないClearSession Actionを呼ぶとセッション変数をクリアし、ユーザーをログアウトさせます。
実際にScreen Actionをこのように作ってテストしてみました。
すると、ClearSession呼び出し直後では、GetUserIdがログインユーザーのIdを返す(=普通はログイン中を表す)。
ただ、その後(Preparationが動いた後)、ちゃんとSecurityExceptionが発生し、Session変数もクリアされていました。ドキュメントからはわかりませんが、タイムラグがあるのかもしれません。
C#のソースコードを確認してみる
各Actionに対応するC#のコードの主な部分を抜粋してみます。
.NETのSystem.Web.HttpContext.Current.Session.Timeoutに対する薄いラッパとして作成されているようです。
SetSessionTimeOut(ssMinutesはInput Parameterの分単位のタイムアウト時間)
HttpContext.Current.Session.Timeout = ssMinutes;
GetSessionTimeOut(ssMinutesはOutput Parameter)
ssMinutes = HttpContext.Current.Session.Timeout;
ClearTimeOut
HttpContext.Current.Session.Clear();
無効にしたのに、次のアクセスでSecurity Exceptionが起きない?
Persistent Loginを有効にしていると、タイムアウト発生後の次のアクセスで自動的に再ログインされてしまい、Security Exceptionが発生しないようです。
Security Exception発生時のトラブルシュートでこの機能を利用する場合はご注意ください。
(Persistent LoginはCookieを使って、一定期間はユーザーのログインを維持させる仕組みです。
標準のログイン画面では、「Remember me」のチェックボックスを入れておくとこの機能を使ってログインされます)