显示用户上次的访问时间

在用户访问我web应用的时候,显示上次访问的时间,这里只显示一次

public class LastAccessTimeFilter extends HttpFilter {
	public void doFilter(HttpServletRequest request,HttpServletResponse response,FilterChain chain)throws IOException, ServletException {
	//request.getSession()就会创建一个session,如果没有就会创建一个。isNew()方法为是否为新的session,如果是新的就提示上次访问的时间是,否则就不用老提示。
		if(request.getSession().isNew()) {
			// 拦截所有的请求
			response.setContentType("text/html;charset=utf-8");
			// 读取cookie  name为lastAccessTime
			Cookie[] cookies = request.getCookies();
			String lastAccessTime = null;
			//首次访问Cookie为空,当调用cookies.length就会报空指针异常
			for(int i=0; cookies!=null&&i<cookies.length; i++) {
				if("lastAccessTime".equals(cookies[i].getName())) {
					lastAccessTime = cookies[i].getValue();
					//当Cookie很多时,我只要找到了就跳出循环,这样效率会高
					break;
				}
			}
			if(lastAccessTime==null)
				response.getWriter().print("您是首次访问本站" + "<hr>");
			else
			response.getWriter().print("您上次的访问时间是:" + lastAccessTime + "<hr>");
			// 获得一个时间
			Date date = new Date();
			// 创建 cookie
			Cookie cookie = new Cookie("lastAccessTime", date.toLocaleString());
			// 必须设置缓存时间,否则当用户关闭浏览器后,会话结束了就没有Cookie了
			cookie.setMaxAge(60*60*5);
			// 设置有效路径,这样在访问我web应用的路径的时候就会带着cookie来,若果不设置cookie只在当前路径有效
			cookie.setPath(request.getContextPath());
			// 发送cookie
			response.addCookie(cookie);
		}
		// 放行
		chain.doFilter(request, response);
	}
}


### Java Web 中通过 Session 和 Cookie 实现显示用户上次访问时间 在 Java Web 开发中,可以通过 `HttpSession` 或者 `Cookie` 来记录用户上次访问时间,并将其展示给用户。以下是具体的实现方式。 #### 使用 Session 实现 当用户第一次访问网站时,可以设置一个属性用于存储当前的时间戳。如果用户再次访问,则可以从 `HttpSession` 对象中获取之前保存的时间戳并计算差值。 ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/sessionTime") public class LastVisitWithSession extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Long lastAccessedTime = (Long) session.getAttribute("lastAccessed"); String message; if (lastAccessedTime != null) { long currentTimeMillis = System.currentTimeMillis(); long elapsedTimeInSeconds = (currentTimeMillis - lastAccessedTime) / 1000; // Convert to seconds message = "您距离上次访问已经过去了:" + elapsedTimeInSeconds + " 秒"; } else { message = "欢迎首次访问我们的网站!"; } session.setAttribute("lastAccessed", System.currentTimeMillis()); response.setContentType("text/html;charset=UTF-8"); response.getWriter().println("<h1>" + message + "</h1>"); } } ``` 上述代码展示了如何利用 `HttpSession` 存储和检索用户的最后一次访问时间[^1]。 --- #### 使用 Cookie 实现 另一种方法是使用 `Cookie` 将用户的最后访问时间存储到客户端浏览器上。每次请求服务器时都会携带这些 Cookies 数据回来供程序处理。 ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/cookieTime") public class LastVisitWithCookie extends HttpServlet { private static final String COOKIE_NAME = "LastVisited"; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { boolean isFirstVisit = true; StringBuilder sb = new StringBuilder(); Cookie[] cookies = req.getCookies(); if (cookies != null && cookies.length > 0){ for(Cookie c : cookies){ if(c.getName().equals(COOKIE_NAME)){ long previousTimestamp = Long.parseLong(c.getValue()); long currentTimestamp = System.currentTimeMillis(); double elapsedMinutes = ((currentTimestamp - previousTimestamp)/1000d/60); sb.append(String.format("您的前一次访问是在 %.2f 分钟以前.", elapsedMinutes)); isFirstVisit=false; break; } } } if(isFirstVisit){ sb.append("这是您的初次访问!"); } // 设置新的 cookie 值. Cookie visitCookie=new Cookie(COOKIE_NAME,String.valueOf(System.currentTimeMillis())); visitCookie.setMaxAge(7*24*60*60); // Seven days life span. resp.addCookie(visitCookie); resp.setContentType("text/html;charset=UTF-8"); resp.getWriter().write(sb.toString()); } } ``` 此部分说明了怎样借助于 `Cookie` 技术完成相同功能的同时还提供了更持久化的解决方案[^3]。 --- #### 总结对比两者优缺点 | 特性 | **基于 Session** | **基于 Cookie** | |--------------------|-----------------------------------------|----------------------------------------| | 生命周期管理 | 受限于服务端内存大小 | 客户端控制有效期 | | 数据安全性 | 更加安全 | 如果未加密传输则存在泄露风险 | | 跨设备支持情况 | 不同设备间无法共享 | 支持跨多个不同终端同步数据 | 以上表格总结了两种技术方案各自的特性以及适用场景[^2][^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值