Реализация просмотра страницы - PullRequest
1 голос
/ 17 марта 2010

Я хочу добавить функцию просмотра страницы в моем текущем веб-приложении. Этот просмотр страницы основан на количестве пользователей, просматривающих страницу. Он должен быть уникальным, то есть я не должен просматривать страницу человека 10000 раз и записывать ее как 10000 просмотров, просто вместо этого записать 1 просмотр.

У меня вопрос, должен ли я основывать количество просмотров на IP-адресе? Если нет, каков наилучший подход к этому?

Я знаю, что если человек вошел в мою систему, я могу просто использовать идентификатор пользователя, сохраненный в сеансе, и проверить запись, если пользователь просмотрел / не просмотрел страницу, и обновить соответствующим образом. Но для «анонимных» зрителей, какой подход лучше?

Спасибо.

PS Как это делает Youtube?


Прочитав большую часть комментария здесь, я все еще не уверен, поможет ли предложенное решение. Возьмем типичный пример: видео на Youtube. Они хранят просмотры страниц в постоянном хранилище и следят за тем, чтобы он не записывал одного и того же пользователя дважды. Если есть анонимные зрители, он (каким-то образом) удостоверяется, что (я знаю, что это не полное доказательство или нет) анонимный зритель обновляет количество просмотров страниц один раз. Он может сделать это через cookie (но что, если вы удалите его) или через IP-адрес (но это не поможет, если вы находитесь за брандмауэром компании). Есть ли другая стратегия, которая может лучше всего помочь с этим?

PS Специально для просмотра страниц пользователя (т. Е. Вашей учетной записи на YouTube), он может сказать, сколько зрителей просмотрели ваш профиль. У этого есть другой подход к получению просмотра страницы?

Ответы [ 4 ]

1 голос
/ 17 марта 2010

Вы можете создать фильтр , сопоставить его с "/ *". В этом фильтре вы можете хранить информацию о пользователе в сеансе:

 HttpSession session = request.getSession(true);

 Integer ival = (Integer) session.getValue("knownuser");
 if (ival==null) {
     ival = new Integer(1);
     incrementUsersCounter ();
     session.putValue("knownuser", ival);
 }
1 голос
/ 17 марта 2010

Может быть, вы могли бы начать сначала смотреть в совершенно ином направлении: если вы уже используете Google Analytics (или аналогичную программу), вы можете использовать ее API для получения данных о просмотре текущей страницы. Данные не будут полностью обновлены, но реализация очень проста и может уже сделать то, что вам нужно.

1 голос
/ 17 марта 2010

Вы можете использовать куки для идентификации пользователей. Некоторые отключают файлы cookie или удаляют их, но это даст вам лучший результат и будет довольно дешевым в реализации.

Проблема с фильтрацией на основе IP заключается в том, что многие люди находятся за брандмауэрами, и вы можете не подсчитать попадания для нескольких пользователей за одним брандмауэром.

0 голосов
/ 17 марта 2010

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. Надеюсь, он работает

...