2

現在のWebアプリケーションにページビュー機能を追加したいと思います。このページビューは、ページを表示しているユーザーの数に基づいています。一意である必要があります。つまり、人のページを10000回表示して、10000ビューとして記録することはできません。代わりに、1ビューを記録するだけです。

私の質問は、ページビュー数をIPアドレスに基づいて決定する必要があるかどうかです。そうでない場合、これを行うための最良のアプローチは何ですか?

その人が私のシステムにログインしている場合は、セッションに保存されているユーザーIDを使用して、ユーザーがページを表示したかどうかを記録で確認し、それに応じて更新できることを知っています。しかし、「匿名の」視聴者にとって、最善のアプローチは何ですか?

ありがとう。

PS Youtubeはどのようにそれを行いますか?


ここでコメントのほとんどを読んだ後、提供された解決策が役立つかどうかはまだわかりません。典型的な例を見てみましょう:Youtubeビデオ。ページビューを永続ストレージに保存し、同じユーザーを2回記録しないようにします。匿名の閲覧者がいる場合は、(どういうわけか)匿名の閲覧者がページビュー数を1回更新することを確認します(完全な証拠ではないことを私は知っていますか、それともそうです)。クッキー(ただし、削除した場合はどうなりますか)またはIPアドレス(ただし、会社のファイアウォールの背後にいる場合は役に立ちません)を介してそれを行うことができます。これを最もよく助けることができる他の戦略はありますか?

PS特にユーザーのページビュー(つまり、YouTubeアカウント)の場合、プロフィールを閲覧した視聴者の数を知ることができます。ページビューを取得するための別のアプローチはありますか?

4

4 に答える 4

1

クッキーを使用して、匿名ユーザーを識別することができます。Cookieを無効にしたり削除したりするものもありますが、より良い結果が得られ、実装するのに非常に費用がかかりません。

IPベースのフィルタリングの問題は、多くの人がファイアウォールの背後にいて、単一のファイアウォールの背後にある複数のユーザーのヒットをカウントできない可能性があることです。

于 2010-03-17T11:01:39.013 に答える
1

フィルタを作成し、「/*」にマップできます。このフィルターでは、セッション中のユーザーに関する情報を保存できます。

 HttpSession session = request.getSession(true);

 Integer ival = (Integer) session.getValue("knownuser");
 if (ival==null) {
     ival = new Integer(1);
     incrementUsersCounter ();
     session.putValue("knownuser", ival);
 }
于 2010-03-17T11:02:13.480 に答える
1

最初にまったく別の方向性を検討し始めることもできます: 既に Google アナリティクス (または同様のもの) を使用している場合は、その API を使用して現在のページのページ ビュー データを取得できます。データは完全に最新のものではありませんが、実装は非常に単純で、必要なことは既に実行されている可能性があります。

于 2010-03-17T11:36:49.003 に答える
0

JAVA SERVLET api は、この件に関して sessionCreated(HttpSessionEvent se) および sessionDestroyed(HttpSessionEvent se) を提供します。これらのメソッドは、新しいセッションが作成され、セッションが破棄されようとしているという通知としてそれぞれ呼び出されます。以下のようにサーブレットコードを用意しましょう

03.import javax.servlet.http.HttpSessionEvent;
04.import javax.servlet.http.HttpSessionListener;
05.import javax.servlet.http.HttpSession;
06.import java.util.List;
07.import java.util.ArrayList;
08. 
09.public class SessionCounter implements HttpSessionListener
10.{
11.    private List sessions = new ArrayList();
12. 
13.    public SessionCounter()
14.    {
15.    }
16. 
17.    public void sessionCreated(HttpSessionEvent event)
18.    {
19.        HttpSession session = event.getSession();
20.        sessions.add(session.getId());
21. 
22.        session.setAttribute("counter", this);
23.    }
24. 
25.    public void sessionDestroyed(HttpSessionEvent event)
26.    {
27.        HttpSession session = event.getSession();
28.        sessions.remove(session.getId());
29. 
30.        session.setAttribute("counter", this);
31.    }
32. 
33.    public int getActiveSessionNumber()
34.    {
35.        return sessions.size();
36.    }
37.}

ユーザー数を表示するには、次のような JSP ページを用意します。

<html>
<head>
    <title>Session Counter</title>
</head>

<body>
<%
    SessionCounter counter = (SessionCounter) session
            .getAttribute("counter");
%>
Number of online user(s): <%= counter.getActiveSessionNumber() %>
</body>
</html>

そして、web.xmlファイルを設定するとうまくいくといいのですが

于 2010-03-17T11:49:00.200 に答える