1

私はしばらくの間、この問題を解決しようとしてきました。

クライアントのサーバーで実行されているアプリケーションを作成しました。クライアントは、システムを使用するために各ユーザーのライセンスを購入する必要があります。したがって、各ユーザーは自分のコンピューター上に、そのコンピューターだけでアプリケーションにアクセスするためのリンクを持っています。そこでは、コンピュータごとにユーザーごとに登録し、データベースに保存する必要があります。

したがって、ユーザーが別のコンピューター/デバイスを使用してアプリケーションにアクセスすることを制限する必要があります。私の質問は、php(または他の言語)を使用して各コンピューターから一意の情報を取得する方法です。これにより、ユーザーがログインしようとするたびにこの情報を確認できます。私は、uがphpを使用してのみブラウザ情報を取得できることを学びました。だから私を正しい方向に導くことができるいくつかのアイデアを探しています。

私が試したのは、各PCに一意のCookieを保存し、データベースに登録することです。しかし、それに関する問題は、一部のユーザーがCookieをクリアして、アプリにアクセスできないという問題を常に抱えていることです。

4

2 に答える 2

5

ユーザーをコンピューターにリンクすることはお勧めできません。なぜ最初にWebアプリケーションの独立性と柔軟性を作成し(PHPであるためWebアプリケーションであると仮定しますか、それとも実際にコマンドラインユーザーがいますか?)、次にそれを単一のデバイスに制限します。盗まれる...おそらく会社はユーザーごとに固定のワークスポットを持っていませんが、より多くのパートタイムの従業員のために少数のコンピューターを使用しているため、各ユーザーは毎日異なるコンピューターを使用する可能性があります。

このような制限が本当に必要な場合は、ユーザーごとのセッション数を制限することをお勧めします。つまり、セッションIDとそれらのセッションのユーザー名をテーブルに記録します。リクエストごとに、テーブルを更新してリクエストの日時を保存し、期限切れのセッションを確認できるようにします。MySQLを使用すると、ストレージタイプのテーブルを作成できますMEMORY。これは、セッション情報に高速で非常に役立ちます。データベースサーバーを再起動するとデータは失われますが、通常、この種の情報では問題になりません。

今、継続する可能性があります:

  1. ユーザーが別のPCまたはブラウザーに再度ログインすると、新しいセッションIDを受け取ります。その場合、ログインプロセス中に、セッションテーブルを調べて、ユーザーが別のセッションIDを開いているかどうかを確認できます。その場合は、ログインをブロックします。

    セッションがタイムアウトした場合、たとえば、15分以上経過している場合は、とにかくログインを許可して、古いセッションを削除できます。

    欠点は、ブラウザまたはPCがクラッシュした場合、ユーザーが別の場所で作業を続行する前に、タイムアウト期間を待たなければならないことです。これは、どの作業環境でもおそらく受け入れられません。

  2. より良い解決策は次のとおりです。ユーザーは「アクティブな」セッションを1つだけ持つことができます。ユーザーが別のワークスポットからログインすると、自動的に新しいセッションが取得されます。その場合は、新しいセッションを受け入れて、古いセッションIDを削除するだけです。古いセッションで引き続き作業する場合は、そのセッションがセッションテーブルに存在しないため、再度ログインする必要があることがわかります。

    このソリューションを使用すると、ユーザーは待つことなくワークスペースをすばやく切り替えることができますが、2人のユーザーが同じユーザー名を同時に使用する場合は、実質的に各リクエストに再ログインする必要があります。

しかし、私は本当にそれについて二度考えます:なぜあなたはその制限を望むのですか?企業が許可されているよりも多くのユーザーでソフトウェアを使用することをいとわない場合は、PHPコードを変更してこのチェックを削除することもできますが、これは簡単なことです。

また、ソフトウェアの使用を煩わしくしすぎると、ソフトウェアをまったく使用しないことを決定し、別のソフトウェアを検索する場合があります。お客様を信頼するのが一番だと思います。

于 2012-12-03T10:13:34.857 に答える
0

PHPだけを使ってこれをアーカイブすることはできないと思います。PHPはサーバー上で実行され、そこから取得できる唯一のクライアント情報はIPであり、動的である可能性があるため機能しません。または、同じLANにいる場合はすべてのユーザーに対して同じです。

クライアントで実行されるものを使用すると、javascriptが適切なアイデアとして表示されますが、問題があります。ユーザーはそれを確認でき、情報を確認または取得する方法を確認できるため、その動作を操作するのは非常に困難です。簡単。javascriptからユーザーのMACを取得したとしても、それは機能しません。原因MACは変更される可能性があります。

他のコンピューターやデバイスからログに記録できないように、クライアントに何らかの種類のexe(C、C ++、C#、javaなど)をインストールする必要があると思います。もちろん、ユーザーがWebアプリを使用する前に、これをインストールしてユーザーに通知する必要があります。

別の言い方をすれば、なぜ1台のPCでのみ動作する必要があるWebアプリを実行しているのですか?つまり、Webアプリの優れた点の1つは、ほとんどすべてのPC/デバイスで使用できることです。

于 2012-12-03T10:13:20.353 に答える