一定期間毎に現在の端末からのログインセッション確認する方法

中級者以上向けの方法です。実装することでサイトが動作しなくなることもありますので、ご利用の際には検証環境を用意して十分に気をつけて作業してください。

重複ログイン禁止機能の限界

TAKETINのWordpressプラグインでは、ログイン情報の使いまわしといった問題に対する解決策が用意されています。

重複ログイン禁止機能を使うことで画面読み込み時の重複チェックを行えるようになっており、ログイン情報の使いまわしを抑制することができるようになっています。

重複ログインを禁止する方法

2020年4月10日

しかしながら、画面を開いている状態であれば別のログインが行われたとしても、その画面のコンテンツ(動画など)は視聴し続けることができてしまいます。

そこで以下のプログラムを実装することで、一定期間毎に現在の端末からのログインセッションが重複ログインでないかを確認することができます。

1.function.phpに以下のコードを記述

function add_ajaxurl() {
?>
    <script>
        var ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>';
    </script>
<?php
}
add_action( 'wp_head', 'add_ajaxurl', 1 );

2.テンプレートファイルに以下のコードを記述

テーマのテンプレートファイル等に以下のコードを記載すると、60秒毎に重複ログインがされていないかを確認するための通信が行われます。
重複ログインが確認されたときには、重複ログイン時のページへ転送されるようになっています。

たけちん
javascriptを変更することで、お好きに挙動をコントロールできます。
<script type="text/javascript">
jQuery(document).ready(function($) {
    var int = setInterval(function duplicateCheck(){
	  var login_token = '<?php echo $_COOKIE[TMP_MEM_COOKIE_KEY]["login_token"];?>';
		var unique_code = '<?php echo $_COOKIE[TMP_MEM_COOKIE_KEY]["unique_code"];?>';
		var redirect_url = '<?php echo esc_url( home_url( '/' ) ); ?>duplicate-not-allow/';
		$.ajax(
			ajaxurl,
			{
				type: 'post',
				data: {
					'action' : 'duplicate_login_check',
					'login_token' : login_token ? login_token : null,
					'unique_code': unique_code ? unique_code : null
				},
				dataType: 'json'
			}
		)
		.done(function(data) {
			if (!data.result) {
				//duplicated
				location.href = redirect_url;
			} else {
				console.log(data.mess);    
			}
		})
		.fail(function(errors) {
			//console.log(errors);
		});  
    }, 600000);
});
</script>
はくにゃん
ちょっと難しいね