我想在我当前的网络应用程序中添加一个综合浏览功能。此页面视图基于查看页面的用户数。它必须是唯一的,即我不能查看一个人的页面10000次并将其记录为10000个视图,而只记录1个视图。
我的问题是,我应该将我的网页浏览量计入IP地址吗?如果不是,那么这样做的最佳方法是什么?
我知道如果此人已登录我的系统,我可以简单地使用存储在会话中的用户ID,并检查记录,如果用户已经/未查看该页面并相应地更新。但对于“匿名”观众来说,最好的方法是什么?
感谢。
PS Youtube是如何做到的?
在阅读了大部分评论后,我仍然不确定所提供的解决方案是否有帮助。举一个典型的例子:Youtube视频。它们将页面视图存储在持久存储中,并确保它不会两次记录同一用户。如果有匿名观众,它(以某种方式)确保(我知道它不是完全证明,或者是它)匿名查看器更新一次网页浏览计数。它可以通过cookie(但如果你删除它)或通过IP地址(但如果你坐在公司防火墙后面没有帮助)。还有其他策略可以最好地帮助解决这个问题吗?
PS 特别是对于用户综合浏览量(即您的YouTube帐户),它可以告知有多少观看者查看了您的个人资料。这有另一种获取网页浏览的方法吗?
答案 0 :(得分:1)
您可以使用Cookie来识别匿名用户。有些人会禁用cookie或删除它们,但它会给你一个更好的结果并且实施起来相当便宜。
基于IP的过滤问题是很多人都在防火墙后面,你可能无法计算单个防火墙后面的多个用户的点击量。
答案 1 :(得分:1)
您可以创建filter,将其映射到“/ *”。在此过滤器中,您可以在会话中存储有关用户的信息:
HttpSession session = request.getSession(true);
Integer ival = (Integer) session.getValue("knownuser");
if (ival==null) {
ival = new Integer(1);
incrementUsersCounter ();
session.putValue("knownuser", ival);
}
答案 2 :(得分:1)
也许您可以先开始寻找完全不同的方向:如果您已经在使用Google Analytics(或类似版本),您可以使用它的API来获取当前页面的网页浏览数据。数据不是完全最新的,但实现非常简单,可能已经完成了您的需要。
答案 3 :(得分:0)
JAVA SERVLET api就此事向我们提供了帮助 sessionCreated(HttpSessionEvent se)和sessionDestroyed(HttpSessionEvent se)。这些方法将被称为创建新会话的通知,并且会话将分别被销毁。 让我们有servlet代码如下
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文件我希望它能正常工作