Cookie案例 – 记住上次访问时间
案例需求
- 访问一个服务资源Servlet,若果是第一次访问,则提示:您好,欢迎您首次访问!
- 若不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
案例分析
- 假设tomcat部署在服务器后不再关闭,则当浏览器未关闭时,可以采用cookie会话来实现;若浏览器关闭,也可以设定
setMaxAge(int expiry)方法来设置Cookie存储的时间 - 在服务资源Servlet中创建一个lastTime的Cookie对象;当客户端访问该资源时,通过查询该Cookie对象是否存在即可知是否第一次访问
- 若没有lastTime的Cookie对象,则是第一次访问
*响应数据:您好,欢迎您首次访问!
*创建名为lastTime的Cookie,并写入数据:lastTime=“当前访问时间” - 若有lastTime的Cookie对象,则不是第一次访问
*响应数据:欢迎回来,您上次访问时间为:lastTime记录的值
*重新写入lastTime的Cookie:lastTime=“当前访问时间”
- 若没有lastTime的Cookie对象,则是第一次访问
案例要点
-
响应编码格式:由于需要给客户端响应数据,且包含中文,所以需要设置响应头,告知客户端编码格式
*response.setContentType(“text/html;charset=utf-8”); -
获取登陆时间:新建一个Date对象获取时间,然后新建一个SimpleDateFormat对象,设置时间格式,最后调用
SimpleDateFormat对象的format方法,为获取的时间设置格式
*Date date = new Date();
*SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
*String str_date = sdf.format(date); -
空格不兼容问题:由于设置的时间格式中存在中文空格,导致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”); -
设置cookie的存活时间:我们不需要计算出cookie具体需要存活多少秒,只需要给出计算表达式即可,例如存活一天,是606024秒
// 设置cookie的存活时间为3个月
cookie.setMaxAge(606024303);
案例主要代码
// 设置是否包含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

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

被折叠的 条评论
为什么被折叠?



