従来のクライアントサーバーソフトウェアを(PHPを使用して)Webベースのバージョンに変換する方法を検討するように求められました。
管理からの最初の質問の1つは、同時実行ユーザーの数をどのように制限するかでした。現在、すべてのクライアントがアプリの実行時に接続するライセンスマネージャーによって処理されます。
私のイニシャルの考え:
Webアプリにログインできる同時ユーザーの数を制限する標準/ベストプラクティスの方法はありますか?
これには非常に非常に注意してください。アイドルセッションタイムアウトがあり、それが何であるかを確認してください。それを文書化します。構成可能も素晴らしいでしょう。
これがWeb上で危険である理由は、セッションのライフサイクルが見かけほど単純ではないためです。人々はハッピーパスに基づいてセッションを評価する傾向があります。ユーザーがログインしてからログアウトします。
しかし、考慮すべきいくつかの事柄:
私はこれらの懸念のいくつかが処理されるのを見ました。できます。しかし、それは複雑なので、警告されます。
データベースアプローチでログインとログアウトのカウントを選択しても、同じ問題がいくつか発生します。ユーザーがログアウトせず、セッションがタイムアウトした場合はどうなりますか?これはJava EEでSessionBindingListenerを定義することで解決されたので、セッションがタイムアウトしたときにデータベースにアクセスしてログインを無効にできます。 PHPが同じことを実行できるかどうかはわかりません。 PHPコードはHTTPリクエストが着信したときにのみ呼び出されるため、実行できるとは思えません。しかし、私はPHPの専門家ではありません。
これを実装する方法は、セッションの開始時ではなく、ユーザーが最初にアプリケーションにログインしたときです。
私が採用するアプローチは、認証された各ユーザーのHTTPリクエストで更新されるスライディングトークンです。
CRONジョブを作成するか、各リクエストでスクリプトを呼び出して、期限切れのトークンをデータベースからすばやく削除できます。
これにより、接続する一意のユーザーごとにセッションが開始されるので、セッションとは別にログインを操作できます。また、ユーザーに基づいてトークンを操作し、各ユーザーに複数のログインを許可することもできます。もちろん、これは必須ではないかもしれませんが、少なくとも同じユーザーが2台のWebブラウザーで1台のマシンにログインすると、1つのライセンスとしてカウントされます。
これを企業内に展開する場合は、コードの難読化を調べて改ざん/表示を防止することもできます。