PHPを用いたサイトを作っています。
ログイン人数の制限を行いたいのですが、どのように実現すればいいのか分からず困っています。何か良い方法を知っている方がいらっしゃったら教えていただきたく思います。お願いします。
ログイン時にセッション数を取得できれば、その時に最大人数を超えていればログインさせない、という方法でいけそうなのですが、セッション数を取得する関数はあるでしょうか? ちょっと調べたところでは分かりませんでした。
別の方法としてはログイン時にログイン人数をカウントアップしてDBかファイルに保存しておき、最大人数を超えた場合はログインさせない。ログアウト時はカウントダウンするという方法も考えましたが、問題はウィンドウを×ボタンで閉じられた場合と、タイムアウトでログインが終了した場合に、カウントダウンの処理をする方法が分かりません。そんな方法はありますでしょうか。
よい知恵を持っている方がいらっしゃったらよろしくお願いします。
No.1ベストアンサー
- 回答日時:
後者の方法ではログファイルに
----------------------------------------
hoge:1155601106
hoge2:1155601107
ben:1155601108
mike:1155601109
----------------------------------------
の形式で記録しておきログイン時刻はUNIX時間で記録します。
UNIX時間は1790年1月1日からの秒数になっています。
あとは、cronなどを使い一定時間毎に
ログファイルからユーザー名を一行づつ取り出し
時間を比較してログイン時刻をオーバーしているユーザーがいれば
その行を削除してしまう。
例えば、2006/8/15 09:23:28なら1155601408になります。
そして、強制ログアウト時間を10分にするなら
60*10=600秒になります。
<?
//途中は省いてます。
// ユーザー名を一行づつ取り出し$LoginTime変数に格納
$NowTime = time();
$LogOutTime = 60 * 10;
$AutoLogOutTime = $NowTime + $LogOutTime;
if($LoginTime<$AutoLogOutTime){
//強制ログアウトの処理
//ログファイルから対象ユーザーを削除
}else{
//強制ログアウトしない場合の処理
}
?>
という仕組みでどうでしょうか。
もちろん、このログファイルに記載されるユーザー名のログイン時刻は
制御対象のページを読み込む毎に時刻を更新してやらないと
ログインしてページを見ているのに一定時間経つと強制ログアウトしてしまう事になりますので。
回答ありがとうございます。
回答内容正しいと思います。
セッション変数のタイムアウトによるログアウトの処理はこれで十分だと思います。
なのですが、すみません、最終的にやりたいことを私が書いていなかったので、申し訳ないです。
ログイン人数の制限といっても、一般に公開して大量人数のログイン上限を設定するのではなく、逆に小規模なイメージで、部屋の中にいる人間のみで使用する感じです。
例えばログイン制限人数を3人とします。セッション変数が破棄される時間を15分とします。
で、問題は、今、3人ログインしているとします。だれか1人が×ボタンでブラウザを終了する。部屋の中で見て1人空いたな、と思った4人目がログインしようとしても15分待たなければ入れない。これを回避したいのです。せめて1分後くらいにはログインできるようにしたいのです。
JavaScript の onunload() でウィンドウが閉じられたイベントを取れるようです。このとき、JavaScriptのwindow.location で、PHPの処理が埋め込まれたページをリクエストして、ウィンドウは閉じられながら、処理だけ実行される、というのは、無理な気がしています。まだちゃんとやってみてないので確かなことがいえなくて申し訳ないです。
No.3
- 回答日時:
No.1さんの方法を利用して、cronではなくログイン画面の前処理でセッション情報の整理を
してはどうでしょう。ログイン画面の<html>の前辺りに
<?php
~~セッション整理~~
?>
みたいなscriptを書いておけばいいのではないでしょうか?
No.2
- 回答日時:
たしかに JavaScript を使用することでウィンドウを閉じた場合は、カウントダウンの処理ができます。
この場合、ajaxを実装しているブラウザに限定する必要があるので、ものすごい古いブラウザは拒否する必要がありますし、JavaScript もそれぞれのブラウザに適応したコードにしなければいけません( ajax用のラ関数があります。)
しかし、タイムアウトでログインが切れた場合の処理はDBかファイルに保存した最終更新時間から判定するか, セッションタイムアウトになる前に、JavaScript でアイドルタイムの時間を観測してログアウトの警告をだすことで回避できるのではないでしょうか。
最終更新時間を保存して、ログインユーザーを確認するのはちょっと負荷が大きい気もするので、個人的には JavaScript を使用できるブラウザに限定して、ご希望のチャットルームを開くのがいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
- その他(ブラウザ) Microsoft Edge(最新版)保存中サイトが全てログオフ状態で困っています! 3 2022/06/15 11:02
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- 会社設立・起業・開業 e-Gov電子申請アプリケーションからGビズIDのアカウントをログアウトしたい 1 2023/07/04 20:21
- ドメイン・サーバー・クラウドサービス ChatGPTのアカウントについて 2 2023/04/09 10:53
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(資産運用・投資) SBIベネフィット・システムズのサイトへパソコンからログインできない 6 2023/07/11 16:59
- その他(セキュリティ) アカウントの乗っ取りで質問です。長いです。 先月ツイッターの乗っ取りにあい、アカウントを全て新しくし 2 2022/03/25 20:47
- ヤフオク! ヤフーアカウントについての質問です。 「不正利用が疑われる操作もしくは行為が検知されたため、利用規約 5 2022/08/29 20:22
- Google+ GmailのGoogle アカウント 3 2022/05/12 15:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのセッション有効期限について
-
$_SESSIONと、POSTやGETの違い
-
複数のサーバで運営する場合の...
-
セッションが正しく更新されな...
-
セッションを維持したまま、サ...
-
URLのパラメータをGETのままで...
-
PHP SESSION変数を複数使用でき...
-
【携帯】位置情報コンテンツ+...
-
二人でWEBアプリを動かしている...
-
ログイン画面をはさんだ後、自...
-
セッションの破棄
-
!issetの冒頭の!ビックリマー...
-
sessioncookieをではなくcookie...
-
sessionとcookieの設定内容の区別
-
PHP cookieの値が更新されない...
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
Yahoo! JAPAN IDを新規取得でき...
-
VB.NETからVBAマクロ(引数)を呼...
-
phpでcookieがうまく保存されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLのパラメータをGETのままで...
-
ログイン画面をはさんだ後、自...
-
PHPのセッション有効期限について
-
セッションのスコープ(有効範...
-
Sessionの上限について
-
セッション変数にパスワードを...
-
ブラウザを閉じた後もセッショ...
-
ログインしたら他からログイン...
-
別ブラウザ間でセッションの値...
-
Cookieを利用したユーザ管理
-
複数のサーバで運営する場合の...
-
学校の授業で困っていることが...
-
sessionとcookieの設定内容の区別
-
「ログイン機能を持たせる」説...
-
301リダイレクトはセッション引...
-
PHP cookieの値が更新されない...
-
セッション ID とセッション名...
-
sessioncookieをではなくcookie...
-
管理者としてログイン
-
セッションのタイムアウト管理
おすすめ情報