HTML5 实现对用户访问某一页面进行计数

HTML5 提供了两种在客户端存储数据的新方法:

  • localStorage - 没有时间限制的数据存储
  • sessionStorage - 针对一个 session 的数据存储

localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。

localStorage 可以用于存储该浏览器对该页面的访问次数,当然,如果换个浏览器,这个次数就重新开始计数了。还可以用来存储一些固定不变的页面信息,这样就不需要每次都重新加载了,这个值也可以进行覆盖。

请求和访问localStorage 代码如下:
<!DOCTYPE HTML>
<html>
<body>

<script type="text/javascript">

if (localStorage.pagecount)
	{
	localStorage.pagecount=Number(localStorage.pagecount) +1;
	}
else
	{
	localStorage.pagecount=1;
	}
document.write("Visits:  " + localStorage.pagecount + "  time(s).");

</script> 

<p>刷新页面会看到计数器在增长。</p>

</body>
</html>

也可以使用W3School在线编程工具进行测试: 打开示例页面
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现网页访问计数功能需要考虑多个问题,包括如何判断一个用户是否已经访问过网站、如何在多个请求之间共享计数器、如何将计数器存储到持久化存储介质中等。 下面给出一个基于 HttpSession 的实现方案。 1. 创建一个 CounterServlet 类,用于计数和显示计数器的值。 ```java @WebServlet("/counter") public class CounterServlet extends HttpServlet { private static final String COUNT_KEY = "count"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Integer count = (Integer) session.getAttribute(COUNT_KEY); if (count == null) { count = 1; } else { count++; } session.setAttribute(COUNT_KEY, count); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Counter</title></head><body>"); out.println("<h1>Counter</h1>"); out.println("<p>Count: " + count + "</p>"); out.println("</body></html>"); } } ``` 2. 在 web.xml 中禁用浏览器的缓存功能,以确保每次请求都会到达服务器。 ```xml <web-app> <filter> <filter-name>NoCacheFilter</filter-name> <filter-class>com.example.NoCacheFilter</filter-class> </filter> <filter-mapping> <filter-name>NoCacheFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ``` 其中 NoCacheFilter 是一个自定义的过滤器,用于设置响应头以禁用缓存。 ```java public class NoCacheFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); httpResponse.setHeader("Pragma", "no-cache"); httpResponse.setDateHeader("Expires", 0); chain.doFilter(request, response); } } ``` 3. 在网页中添加计数器链接。 ```html <a href="/counter">Click here to increase the counter</a> ``` 这样,用户访问一次计数器页面计数器的值就会加 1。如果用户在同一个浏览器窗口中多次访问计数器页面计数器的值不会重复增加。 注意:在实际应用中,需要考虑并发访问和持久化存储等问题,本例中没有涉及到这些方面的处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值