ユーザーをコンピューターにリンクすることはお勧めできません。なぜ最初にWebアプリケーションの独立性と柔軟性を作成し(PHPであるためWebアプリケーションであると仮定しますか、それとも実際にコマンドラインユーザーがいますか?)、次にそれを単一のデバイスに制限します。盗まれる...おそらく会社はユーザーごとに固定のワークスポットを持っていませんが、より多くのパートタイムの従業員のために少数のコンピューターを使用しているため、各ユーザーは毎日異なるコンピューターを使用する可能性があります。
このような制限が本当に必要な場合は、ユーザーごとのセッション数を制限することをお勧めします。つまり、セッションIDとそれらのセッションのユーザー名をテーブルに記録します。リクエストごとに、テーブルを更新してリクエストの日時を保存し、期限切れのセッションを確認できるようにします。MySQLを使用すると、ストレージタイプのテーブルを作成できますMEMORY
。これは、セッション情報に高速で非常に役立ちます。データベースサーバーを再起動するとデータは失われますが、通常、この種の情報では問題になりません。
今、継続する可能性があります:
ユーザーが別のPCまたはブラウザーに再度ログインすると、新しいセッションIDを受け取ります。その場合、ログインプロセス中に、セッションテーブルを調べて、ユーザーが別のセッションIDを開いているかどうかを確認できます。その場合は、ログインをブロックします。
セッションがタイムアウトした場合、たとえば、15分以上経過している場合は、とにかくログインを許可して、古いセッションを削除できます。
欠点は、ブラウザまたはPCがクラッシュした場合、ユーザーが別の場所で作業を続行する前に、タイムアウト期間を待たなければならないことです。これは、どの作業環境でもおそらく受け入れられません。
より良い解決策は次のとおりです。ユーザーは「アクティブな」セッションを1つだけ持つことができます。ユーザーが別のワークスポットからログインすると、自動的に新しいセッションが取得されます。その場合は、新しいセッションを受け入れて、古いセッションIDを削除するだけです。古いセッションで引き続き作業する場合は、そのセッションがセッションテーブルに存在しないため、再度ログインする必要があることがわかります。
このソリューションを使用すると、ユーザーは待つことなくワークスペースをすばやく切り替えることができますが、2人のユーザーが同じユーザー名を同時に使用する場合は、実質的に各リクエストに再ログインする必要があります。
しかし、私は本当にそれについて二度考えます:なぜあなたはその制限を望むのですか?企業が許可されているよりも多くのユーザーでソフトウェアを使用することをいとわない場合は、PHPコードを変更してこのチェックを削除することもできますが、これは簡単なことです。
また、ソフトウェアの使用を煩わしくしすぎると、ソフトウェアをまったく使用しないことを決定し、別のソフトウェアを検索する場合があります。お客様を信頼するのが一番だと思います。