1、是什么? 上次访问时间;即用户最近一次登录时间;

2、为什么? 为了提示用户登录或访问记录,提高安全性,如qq登录提示;

3、怎么做? 通过cookie 实现; 用户第1次登录, 服务器把访问时间放入cookie 并作为响应报文返回浏览器,浏览器将cookie 存入磁盘,每次(除第一次外)访问都带上她;

补充: 本文在cookie中存储了访问时间,若业务场景需要,可以存储其他数据;

【荔枝】(转自张孝祥)


// 跟踪上次客户访问时间
public class AccessTimeServlet extends HttpServlet
{public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();//获取记录用户上次访问站点时间的CookieCookie [] cks = request.getCookies();String lastAccessTime = getCookie(cks,"access_time");if(lastAccessTime == null){out.println("没有您上次的访问记录");}else{BASE64Decoder decoder = new BASE64Decoder();String decodedAccessTime = new String(decoder.decodeBuffer(lastAccessTime),"GB2312");out.println("您上次的访问时间为" + decodedAccessTime);}//将用户开始本次访问的时间存储到客户端Cookie中HttpSession session = request.getSession();if(session.isNew()){long createTime = session.getCreationTime();Date dateCreateTime = new Date(createTime);SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd HH点mm分ss秒");String formatedCreateTime = sdf.format(dateCreateTime);BASE64Encoder encoder = new sun.misc.BASE64Encoder();String base64CreateTime = encoder.encode(formatedCreateTime.getBytes("GB2312"));Cookie ckAccessTime = new Cookie("access_time",base64CreateTime);ckAccessTime.setMaxAge(365*24*3600);out.println(formatedCreateTime);response.addCookie(ckAccessTime);}}private String getCookie(Cookie [] cks,String cookieName){String cookieValue = null;for(int i=0; cks!=null && i<cks.length; i++){if(cookieName.equals(cks[i].getName())){cookieValue = cks[i].getValue();break;} } return cookieValue;}
}

4、访问效果

第1次, cookie中没有储存 最近一次访问的记录;

第2次访问,及其以后 ; 因为第1次服务器已经把 访问时间存入cookie, 浏览器将cookie存入本地文件了;所以后续的访问,浏览器请求报文头都会带上服务器返回的cookie 数据;

5、为什么 访问时间access_time 看起来不对劲呢。

因为 access_time 字段值包含中文,如果不经过BASE64编码,那经过网络传输,可能会丢数据;

所以 该字段经过 BASE64 编码过,这里要注意,  BASE64 不是加密算法,而是编码格式,如UTF-8 GBK 编码格式,两者有本质区别

base64 是什么? Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一。

base64 为什么?

我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。
而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,
由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。
所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

base64 怎么做?  

它的编码过程如下:
步骤1:将待转换的字符串每三个字节分为一组,每个字节占 8 个二进制位,那么共有 24 个二进制位。
步骤2:将第(1)步得到的每 24 个二进制位分为每 6 个一组,则每 3 个字节可分为 4 组。
步骤3:在每组前面添加两个 0 ,每组由 6 个二进制位变为 8 个二进制位,总共 32 个二进制位,即四个字节。根据 Base64编码对照表(见下表)获得对应的值。

关于 base64 更多信息,可以参考  https://blog.csdn.net/PacosonSWJTU/article/details/109955148

servlet session 跟踪用户上次访问时间相关推荐

  1. 使用cookie获取用户上次访问时间

    访问路径:http://localhost:8080/day18/cookieTest cookie可以用于不用登录的用户信息存储 大小为4k,每个域名下最多存20个 同一服务器下不同项目模块的coo ...

  2. Cookie记录用户上次访问时间

    目录 一.记录上一次用户访问时间 1.1 需求 1.2 分析 1.3 代码实现 1.4 实现效果图 1.5 总结 一.记录上一次用户访问时间 1.1 需求 (1)访问一个Servlet,如果是第一次访 ...

  3. 记录用户上次访问时间

    记录用户上次访问服务器的时间 需求:用户第一次访问,显示欢迎,这是您第一次访问,用户后续访问该页面,显示欢迎回来,您的上次访问时间为xxx年xx月xx日 hh:mm:ss 分析: 使用cookie来保 ...

  4. 显示用户上次访问时间

    一.创建LastAccessServlet 该类主要用于实现获取Cookie信息并将当前时间作为Cookie值发送给客户端. public class LastAccessServlet extend ...

  5. Cookie实例:显示用户上次访问的时间

    1. 效果 用户第一次访问HistServlet的时候,页面显示你是首次访问本网站,当前时间为:xxx.第n次访问:欢迎回来, 你上次访问的时间为xxx,当前时间为xxx. 2. 分析 要保证第二次访 ...

  6. Servlet案例6:显示用户的上次访问时间

    这里是cookie的简单应用 告诉用户您的上次访问时间是:xxxx-xx-xx xx:xx:xx 思路: 第一次访问该网站时候,记录当前访问时间(new Date()) 把当前时间以cookie的形式 ...

  7. php 上次登陆时间,php使用cookie显示用户上次访问网站日期的方法

    本文实例讲述了php使用cookie显示用户上次访问网站日期的方法.分享给大家供大家参考.具体实现方法如下:<?php if(!empty($_COOKIE['lastvisit'])){//先 ...

  8. 简单的Cooki案例——记录用户上次访问该网页的时间

    功能: 帮助网站实现提示客户端计算机上次访问网站的时间 实现原理: 将每一个会话作为一次访问过程,将每次会话的开始时间作为每次访问网站的时间,然后将这个时间以Cookie的形式存储到客户端的计算机中, ...

  9. Cookie案例-显示用户的上次访问时间代码实现

    1 案例分析 2 Java实现代码 1 public class LastAccessTimeServlet extends HttpServlet { 2 protected void doGet( ...

最新文章

  1. cron 定时器简单入门
  2. 两个对于Apriltag图片处理问题讨论
  3. python变量类型-Python 变量类型详解
  4. python网络编程库_python网络编程学习笔记(9):数据库客户端
  5. HDU - 1005 Number Sequence(循环群)
  6. access如何设置定期报表汇总_报表工具选型对比系列 - 大报表
  7. jboss 配置上下文路径_为单个Web应用程序配置多个上下文根– JBoss
  8. vuex 最简单、最详细的入门文档
  9. 13,反转链表《剑指offer》
  10. 2015-2016 XVI Open Cup, Grand Prix of Bashkortostan, SKB Kontur Cup Stage 2
  11. ZooKeeper CentOS7上安装
  12. 局域网不能远程控制_如何通过Windows自带的局域网远程控制连接两台设备
  13. JS规则 是非颠倒(逻辑非操作符)!是逻辑非操作符,也就是不是的意思,非真即假,非假即真...
  14. Julia: map、匿名函数和“差之毫厘,谬之千里”
  15. 一键清空服务器文件,一键清理操作系统垃圾文件的BAT
  16. 6.4 利用色彩范围命令快速选择一定色彩范围内的像素 [原创Ps教程]
  17. python画图配色_科研作图有哪些「赏心悦目」的绘图主题和配色方案?
  18. excel数据分析案例
  19. Rebus渲染农场分析
  20. marquee实现文字无缝滚动+css无缝滚动

热门文章

  1. 【NOI2013】向量内积【随机化】
  2. 【康复训练】[国家集训队] calc【dp】【拉格朗日插值】
  3. 【NOI2019】回家路线【无后效性dp状态设计】【斜率优化】
  4. Educational Codeforces Round 88 (Rated for Div. 2) E(数学)
  5. 业界萌新对斯坦纳树的小结
  6. cf1453B. Suffix Operations
  7. AcWing 274. 移动服务
  8. cf1553C. Penalty
  9. 铺地毯(矩形的交+前后缀矩形交)
  10. CodeForces:749(div1)750(div2)