web-dev-qa-db-ja.com

訪問者が私のウェブサイトにいるかどうかを確認する方法は?

一度に1人しかアクセスできないWebサイトを構築したい。このタスクをどのように達成しますか?

PHPで構築されたWebカウンターを見ましたが、これは正しい解決策ではないと思います。このためのHTTPリクエストはありますか?

前もって感謝します。

5

一度に1人にしかコンテンツを提供したくない場合、これはサーバーレベルのmodになります。 Nginxの例として、アクティブな接続の数を1に制限します。

サーバー{limit_conn perserver 1; }

これは、接続する他のユーザーに503エラーを提供します。 503エラーを含むカスタムページを提供し、受信した理由をユーザーに警告することができます。

これがニーズに合わない場合は、コンテンツを全員に提供する必要がありますが、一度に1人のユーザーのみがコンテンツを表示できるように「実際の」コンテンツをゲートする必要があります。埋め込みAJAXスクリプトを使用して、全員がダウンロードするページを作成します。スクリプトは、サーバーにAPI呼び出しを行い、「ページ」が占有されているかどうかを尋ねます。そうでない場合、サーバーはそのページをユーザーセッションに割り当て、コンテンツを返します。スクリプトはこれを表示します。現在「ページ」にない人は、待機中のページが提供され、引き続きポーリングされます。これにより、サーバー側でも整然としたキューを形成できます。

その領域に入ると、そのようなスクリプトを作成する方法を尋ねるためにStackoverflowに投稿することをお勧めします。

4
L Martin

NodeJS のようなものを使用できます。これは、訪問者用のテンプレートを備えたサーバーサイドjavascriptです。このテンプレートはサーバーサイドJSに接続します(見た目より簡単です)。

NodeJS (または別のサーバーサイドjavascript言語)を使用する利点は、ログインしたユーザーが去った瞬間に別のユーザーが参加できることです。 「私たちには1つの余地があります」信号をブロードキャストできます。また、キューを介して次の信号が参加する場合もあります。また、他のすべてのユーザーに、(カスタマイズされた)エラーページと場合によってはキューの代わりにNiceメッセージを提供できます。

AJAXと同様に機能しますが、逆になります。 AJAXを使用して、サーバーに「まだ入場できますか?」と尋ねます。定期的に、NodeJSのソケットは小さな接続を開いており、サーバーは「OK、今すぐ利用できます」をトリガーします。これにより、よりユーザーフレンドリーな代替手段が可能になります。

3
Martijn