開発情報・ナレッジ

投稿者: SPIRERS ナレッジ向上チーム 2022年9月26日 (月)

自動でセッション延長を行う強化ガジェット

SPIRAL では、サイト側のセッションは、最大60分となっています。
セッション時間を自動で延長をする強化ガジェットを作成しました。
同一画面で一定時間経過した場合にセッション延長を行うかの確認ダイアログも表示できるようにしています。

仕様

・XMLHttpRequest を使用して、認証ページ HTTP リクエストを送ることでセッションを延長します
・JavaScript で送信しているため、対応していないブラウザがあります
・画面表示時をキーにタイマーで動作をさせているため時間の誤差が起きる可能性があります

セッション延長用ページ作成

セッションを延長させるために、認証エリア内に「認証あり」でページを作成します。
セッション延長用ページでは、何も表示させる必要はありませんが、
ログインチェックのために body に以下を設定ください。

<!-- loginSessionCheck -->

コード設定方法

セッションを延長させたいページの JavaScript タブにコードを貼り付けて、設定値を変更してください。
全ページ共通で行いたい場合などは、共通ヘッダ をフリーコンテンツに作成し、ブロックの JavaScript タブにコードを貼り付けて、読み込むようにしてください。

JavaScript
// 分単位で設定
const setMinutes = 50;
// 認証ページ 相対パス設定
const postCodeCallUrl = "/";
// 自動セッション延長 true or false
const autoSstatusExtension = false;
// 自動ログアウト true or false
const autoLogout = false;


// 原則変更不可
// 複数強化パーツがある場合、変更あり
window.onload = function () {
	window.setTimeout(sessionCheckAlert, setMinutes*60000);
};

/// 変更不可
// 複数強化パーツがある場合、下記を変更不可箇所に追加
function sessionCheckAlert() {
	if(autoSstatusExtension){
		statusExtension();
	}else{
		if (confirm("セッションを延長しますか?")) {
			statusExtension();
		}
	}
	window.setTimeout(sessionCheckAlert, setMinutes*60000);
}

function statusExtension(){
	var cp = postCodeCallUrl;
    if (window.XMLHttpRequest) {
        var request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        var request = new ActiveXObject('Microsoft.XMLHTTP'); // for old IE
    } else {
        // alert('延長処理に失敗しました。');
    }
    request.open("GET", cp, true);
    request.onreadystatechange = function () {
        if (request.readyState == 4) {
            var status = request.status;
            if (status == "200") {
                // console.log(request.responseText);
				var html = request.responseText;
				if(html.includes(("<!-- loginSessionCheck -->"))){
					alert("セッションを延長しました。");
				}else{
					alert("セッションが切れています。");
					if(autoLogout){
						location.reload();
					}
				}
            }
        }
    }
    request.send();
}
設定値は5ヶ所となります。
setMinutes セッション延長を行う時間を分単位で設定
セッション有効期限より短い時間を設定してください
また、細かく通信を行うとアクセス負荷に引っ掛かる可能性があるのでご注意ください。
postCodeCallUrl セッション延長用ページを相対パスで設定
例)/topPage
autoSstatusExtension 自動でセッション延長を行うか、確認ダイアログを表示するかを設定
自動の場合は、true
確認ダイアログを表示する場合は、 false
autoLogout セッション延長を行った際にすでにログアウト済みの場合にログイン画面へ遷移させるかの設定
遷移させる場合は、true
させない場合は、 false

確認ダイアログの文言(23行目) や アラート文言(47,49行目)も変更可能となっています。
文言を変更したい場合は、"" 内の文言を変更してください。
また、アラートを表示したくない場合は、コメントアウト(*)してください。
* 文字の先頭に「//」をつけることでコメントアウトできます。

最後に

設定後は動作確認を必ず行い、動作に問題がないか確認をしてください。
不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。
解決しない場合はこちら コンテンツに関しての
要望はこちら