Cookie案例--上次访问时间

该博客介绍了一个Cookie案例,用于记住用户上次访问时间。当用户访问Servlet时,通过检查Cookie是否存在来判断是否为首次访问。如果是首次,返回欢迎信息;否则,显示上次访问的时间。文章详细讲解了如何创建、读取和更新Cookie,包括设置响应编码格式、处理时间格式和解决空格编码问题。同时,还讨论了如何在JSP中改进实现,以增强用户体验。

Cookie案例 – 记住上次访问时间

案例需求

  1. 访问一个服务资源Servlet,若果是第一次访问,则提示:您好,欢迎您首次访问!
  2. 若不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

案例分析

  1. 假设tomcat部署在服务器后不再关闭,则当浏览器未关闭时,可以采用cookie会话来实现;若浏览器关闭,也可以设定
    setMaxAge(int expiry)方法来设置Cookie存储的时间
  2. 在服务资源Servlet中创建一个lastTime的Cookie对象;当客户端访问该资源时,通过查询该Cookie对象是否存在即可知是否第一次访问
    1. 若没有lastTime的Cookie对象,则是第一次访问
      *响应数据:您好,欢迎您首次访问!
      *创建名为lastTime的Cookie,并写入数据:lastTime=“当前访问时间”
    2. 若有lastTime的Cookie对象,则不是第一次访问
      *响应数据:欢迎回来,您上次访问时间为:lastTime记录的值
      *重新写入lastTime的Cookie:lastTime=“当前访问时间”

案例要点

  1. 响应编码格式:由于需要给客户端响应数据,且包含中文,所以需要设置响应头,告知客户端编码格式
    *response.setContentType(“text/html;charset=utf-8”);

  2. 获取登陆时间:新建一个Date对象获取时间,然后新建一个SimpleDateFormat对象,设置时间格式,最后调用
    SimpleDateFormat对象的format方法,为获取的时间设置格式
    *Date date = new Date();
    *SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
    *String str_date = sdf.format(date);

  3. 空格不兼容问题:由于设置的时间格式中存在中文空格,导致tomcat服务器不能正确识别,所以需要对字符进行URL编码与解码;
    即在往cookie中添加值之前进行URL编码,从cookie中取值之后,进行URL解码
    *// 加入cookie前,对时间进行URL编码
    *String encode_date = URLEncoder.encode(str_date, “utf-8”);

    *// 从cookie中取值之后,对时间进行解码
    *String decode_value = URLDecoder.decode(value, “utf-8”);

  4. 设置cookie的存活时间:我们不需要计算出cookie具体需要存活多少秒,只需要给出计算表达式即可,例如存活一天,是606024秒
    // 设置cookie的存活时间为3个月
    cookie.setMaxAge(6060
    24303);

案例主要代码

    // 设置是否包含lastTime的标记
    Boolean haveCookie = false;
    // 设置发送编码格式,即设置响应头Content-type的值
    response.setContentType("text/html;charset=utf-8");

    // 1.获取Cookie对象,判断有没有名为lastTime的Cookie对象
    Cookie[] cookies = request.getCookies();
    if (cookies != null && cookies.length > 0){
   
      // 若存在Cookie对象,则查找是否包含lastTime
        for (Cookie c:cookies ) {
   
   
            String name = c.getName();
            if ("lastTime".equals(name)){
   
      // 3.若存在lastTime对象,则不是首次访问
                haveCookie = true;
                // 3.1获取lastTime对象的值
                String value = c.getValue();
                // 对时间进行解码
                String decode_value = URLDecoder.decode(value, "utf-8");
                // 3.2给客户端发送提示信息
                response.getWriter
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值