0

私はエンタープライズ SaaS アプリケーションに取り組んでおり、一部のユーザーはシートごとのアプローチで課金されることを望んでいます。

アクセスが実際に制限されることを確認する方法を考えていました。同じログイン/パスワードを持つ人々が、異なる IP アドレス、異なるユーザー エージェントから同時にログインしていることがわかります。会社が 1 つのシートに対してしか支払っていないにもかかわらずです。

ビジネスと技術の観点から、制限を実装する最善の方法は何ですか? 厳しすぎるつもりはありませんが、同時に、企業には実際に必要な座席数に対して料金を支払ってもらいたいと考えています。

4

2 に答える 2

0

ユーザー エージェントでフィルタリングしないでください。これは厳しすぎると思います。さまざまなブラウザがインストールされている人もいるかもしれません。IP によるフィルタリングも難しい場合があります。一部のユーザーは、定期的に変化する動的 IP を持っている場合があります。

私が持っている 1 つのアイデアは、ユーザーにブラウザー拡張機能をインストールするように強制することです。ブラウザー拡張機能は、オペレーティング システム上の何かから一意の ID を生成できます。おそらく、HDD のボリューム番号や Windows のシリアル キーなど、そのコンピュータに固有のものを使用します。

この一意の ID を取得したら、ユーザーがログインするたびにバックエンド トラッキングでそれを使用します。ユーザーが特定のシート数を超えた場合は、ユーザー アカウントをブロックするか、最初に連絡することができます。

また、ユーザーにある程度の自由を与えることも良い考えです。ユーザーが 1 つのシートを持っている場合、バックエンドは 1 か月 (ローリング期間) に 2 つのシートを許可するようにします。新しい PC または新しい HDD をインストールします。

于 2012-05-28T16:10:30.553 に答える
0

IP を使用するのは悪い考えのようです。LAN 内の人々は (通常) すべて同じ IP を持っています。

PHP に、現在のものとは異なるインスペクション セッションにアクセスするための API がないと仮定すると、1 つのアイデアは次のとおりです。

  • まだ行っていない場合は、発行するログイン Cookie ごとに一意の ID も発行します (UUID が目的に役立ちます)。
  • これらのIDをどこかに保存します(Javaではアプリケーションコンテキストに保存できますが、おそらくphpではそのためにdbテーブルが必要になります-私はphpの専門家ではありません)、「セッション開始」と「最後のアクティビティ」の2つのタイムスタンプとともに"
  • リクエストごとに、現在のタイムスタンプを「最後のアクティビティ」に記録します

次に、新しいリクエストを受け取ったら、他のアクティブなリクエストの数を数えます

  • last activity >= current session start
  • last activity >= now - session TTL(期限切れのセッションをタイムリーに削除できない場合にのみ必要)

これにより、占有されている座席数がわかります。

余剰ユーザーがログインするまで、正確には他のセッションでアクティビティが表示されるまでシート数の違反に気付かないことに注意してください。座席が空になります (まあ、セッションが終了したときだけ空だと言うかもしれませんが、それは不公平に思えます)。

于 2012-05-28T16:43:09.810 に答える