XOOPSオンライン状況にゴーストが

WEBアプリケーションってログオフと言う処理をせずにブラウザを終了すると、ある一定時間でセッションを切断するのが一般的だと思っていました。

しかし、XOOPSのオンライン状況はいつまで経ってもいないはずの人が表示されている...

本日やっと対策を求めてグーグルで検索してみました。
やはり、本家サイトですでに質問されていました。

一般設定のタイムアウトとは無関係と書かれていますね...一般設定をいじっても変わらないはずですね。

消える様になるためには以下の条件を全て満たす必要があるようです。

  1. 300秒以上経過
  2. オンライン状況が表示されるタイミングで1/10の抽選に当たる

2個目の条件が存在しているので、人があまりこないサイトではゴーストが表示されていたわけですね。

理由がわかったのでソースコードをハッキングしてみたいと思います。
書き換えるソースコードは記事中にありました。「/modules/system/blocks/system_blocks.php」です。
function b_system_online_show()の中の書き条件式を削除。

if (mt_rand(1, 100) < 11) {
	$online_handler->gc(300);
}

下記のように修正することで、タイムアウトしたエントリは次回表示時に必ず消えるようになりました。

//if (mt_rand(1, 100) < 11) {
	$online_handler->gc(300);
//}

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/060310_xoops