显示用户上次访问时间

本文介绍了一个简单的Servlet程序,用于记录并展示用户的最后登录时间。通过读取和设置cookie来跟踪用户的活动时间,并在用户访问时返回其上次访问的时间。
/**
 * @Author:gaoyuan
 * @Description:显示用户上次访问时间
 * @DateTime:2021/3/2 20:36
 **/
@WebServlet("/last")
public class LastLoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //cookie的值必须是字符串,并且里面不能有空格
        //获取cookie请求头,cookie:key=value;key=value
        //也就是对于获取cookie请求头的封装,cookies数组
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies)
                //get the cookie name
                if ("lastLogin".equals(cookie.getName())) {
                    //et the cookie value
                    String value = cookie.getValue();
                    //Long.parseLong将一个字符串转换成数字的
                    long time = Long.parseLong(value);
                    Date date = new Date(time);
                    response.getWriter().println(date);

                }
        }
//创建cookie键值对
        Cookie cookie = new Cookie("lastLogin", System.currentTimeMillis() + "");
        //此行代码就是对于设置Set-Cookie;key=value的封装
        response.addCookie(cookie);
    }
}

结果:
在这里插入图片描述

### 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]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值