(案例)使用Cookie保存用户最后一次访问的时间

文章目录

  • 需求
  • 分析
  • 示例代码

需求

1.访问一个Servlet,如果获取不到上一次访问的时间,则提示:您好,欢迎访问。
2.如果可以获取上一次访问的时间,则提示:您好,欢迎回来,您上次访问时间为:显示时间字符串

分析

在服务器中的Servlet判断是否有一个名为 lastTime 的 cookie
1.有

则响应数据:您好,欢迎回来,您上次访问时间为:2018年6月10日11:50: 20
写回 Cookie:lastTime=2018年6月10日11 :50:01

2.没有
响应数据:您好,欢迎访问
写回 Cookie:lastTime=2018年6月10日11 :50:01

示例代码

package priv.lwx.cs.example;
/*** 通过Cookie保存用户最后一次访问的时间** @author liaowenxiong* @date 2022/1/14 16:39*/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;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;@WebServlet("/last_time")
public class SaveLastTimeByCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");boolean flag = false;PrintWriter writer = response.getWriter();// 获取所有的CookieCookie[] cookies = request.getCookies();// 遍历Cookie数组,查找是否存在名为lasttime的Cookieif (cookies != null && cookies.length != 0) {for (Cookie cookie : cookies) {String name = cookie.getName();if ("lastTime".equals(name)) {// 存在名为lastTime的Cookie,则将变量flag的值设为trueflag = true;String value = cookie.getValue();// value是application/x-www-form-urlencoded字符串,需要解码String decDate = URLDecoder.decode(value, "utf-8");writer.write("<h1>您好,欢迎回来,您上次访问的时间:" + decDate + "</h1>");// 获取系统当前时间Date date = new Date();// 创建日期格式对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// 格式化日期对象,返回一个日期字符串String strDate = sdf.format(date);System.out.println("URL编码前:" + strDate);// URL编码,因为Cookie无法存储空格等特殊字符,所以只能将含有空格的字符串转换成application/x-www-form-urlencoded字符串进行存储String encDate = URLEncoder.encode(strDate, "utf-8");System.out.println("URL编码后:" + encDate);// 用最新的系统时间替换名为lastTime的Cookie中旧的日期值cookie.setValue(encDate);// 将名为lastTime的Cookie添加到Response对象中response.addCookie(cookie);break;}}}// 没有名为lastTime的Cookieif (cookies == null || cookies.length == 0 || flag == false) {// 获取系统当前时间Date date = new Date();// 创建日期格式对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// 格式化日期对象,返回一个日期字符串String strDate = sdf.format(date);System.out.println("URL编码前:" + strDate);// URL编码,因为Cookie无法存储空格等特殊字符,所以只能将含有空格的字符串转换成application/x-www-form-urlencoded字符串进行存储String encDate = URLEncoder.encode(strDate, "utf-8");System.out.println("URL编码后:" + encDate);// 创建CookieCookie cookie = new Cookie("lastTime", encDate);// 设置Cookie的存活时间为1个月cookie.setMaxAge(30*24*60*60);response.addCookie(cookie);writer.write("<h1>您好,欢迎访问!</h1>");}}
}

注意:Cookie无法保存空格等字符串,需要进行URL编码进行保存,服务端取值时要URL解码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

aws lambda使用快速提供内容对于任何网站或应用程序具有更好的客户体验都是必不可少的。 如果您将网站或应用程序托管在AWS Cloud中&#xff0c;那么无论从何处访问应用程序&#xff0c;都可以以较低的延迟快速提供内容。 AWS提供了CloudFront服务&#xff0c;用于将内容缓存在…

android+阴影+xml,Android 阴影视图 ShadowViewHelper

软件介绍ShadowViewHelper 是 Android 的阴影布局。xml:android:id"id/activity_main_shadow_view_b"android:layout_width"wrap_content" android:layout_height"wrap_content"android:layout_gravity"center"android:layout_marginT…

docker-compose观察实时日志_基于 Flink SQL CDC 的实时数据同步方案

整理&#xff1a;陈政羽(Flink 社区志愿者) Flink 1.11 引入了 Flink SQL CDC&#xff0c;CDC 能给我们数据和业务间能带来什么变化&#xff1f;本文由 Apache Flink PMC&#xff0c;阿里巴巴技术专家伍翀 (云邪)分享&#xff0c;内容将从传统的数据同步方案&#xff0c;基于 F…

android dialog 字体,android – 为AlertDialog的MultiSelectItems设置自定义字体(字体)

AlertDialog.Builder使用AlertController.AlertParams构建对话框.我检查了AlertDialog.Builder #create()调用AlertController.AlertParams #application()如果设置了项目,则创建ListView并分配适配器(AlertParams#createListView()).我基于createListView源创建了自定义适配器…

困难是成功路上的垫脚石_Java是开发的垫脚石。 学习吧!

困难是成功路上的垫脚石Java是全世界使用最广泛的编程语言之一 。 尽管也有很多其他编程语言&#xff0c;但是没有什么可以比Java更好的了。 Java是用于开发移动应用程序&#xff0c;游戏&#xff0c;Web应用程序&#xff0c;桌面应用程序和许多其他令人兴奋的事物的出色语言之…

python 3.6.5 shell_Linux 安装 Python3.6.5

1. 安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2. 下载 Python 3.6.5 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 3. 创建安装…

你真的会用Mac中的Finder吗?

参加&#xff1a;https://zhuanlan.zhihu.com/p/144139903

用c语言实现mfc系统,MFC实现学生选课系统

本文实例为大家分享了MFC实现学生选课系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下先上效果图&#xff1a;主要功能&#xff1a;输入学号&#xff0c;从数据库中查找学号&#xff0c;若找到相匹配的学号&#xff0c;则显示数据库中姓名、学历、导师&#xff…

spring 构造函数注入_Spring构造函数依赖注入示例

spring 构造函数注入欢迎使用Spring构造函数依赖注入示例指南。 基于构造器的依赖注入是Spring 依赖注入的一种 。 依赖注入的另一种类型是Setter注入和字段注入。 有关Spring依赖注入的更多信息&#xff1a; Spring二传手注射的例子 Spring田间注入 依赖注入–构造函数与现…

python用pip安装numpy mac_Mac下python安装numpy,pandas,matplotlib

numpy是数据分析的库&#xff0c;我的目的是分析股票的数据&#xff0c;Pandas 有两种自己独有的基本数据结构Series &#xff08;一维&#xff09;和 DataFrame&#xff08;二维&#xff09;&#xff0c;它们让数据操作更简单了。它也是 Python 的一个库&#xff0c;所以&…

IntelliJ IDEA for Mac工件包(artifact)中 Web facet resources 的模块名称有误,如何修改?

在工件管理界面中&#xff0c;如果某个工件包中 Web facet resources 的模块名称有误&#xff0c;如下图所示&#xff1a; 你可以在项目根目录下的 .idea/artifacts 目录下找到以工件名称命名的 xml 文件&#xff0c;找到其中含有 facet 属性的 element 标签&#xff0c;更正…

html dom 修改,HTML DOM - 修改

创建新的 HTML 元素如需向 HTML DOM 添加新元素&#xff0c;您首先必须创建该元素(元素节点)&#xff0c;然后把它追加到已有的元素上。实例This is a paragraph.This is another paragraph.var paradocument.createElement("p");var nodedocument.createTextNode(&q…

python数据处理常用函数_Python常用数据处理函数

java多线程处理 package com.copyFile; import java.io.BufferedReader;import java.io.File;import java.io.FileReader;im ... &lbrack;Android&rsqb; RelativeLayout&comma; LinearLayout&comma;FrameLayout Android RelativeLayout 属性 // 相对于给定ID控…

redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较

redis nosql1.什么是NoSql数据库&#xff1f; NoSql&#xff08;不仅是Sql&#xff09;数据库是可水平扩展&#xff0c;持久存储半结构或非结构化数据并具有灵活模式的非关系数据库。 这些数据库支持多种数据模型&#xff0c;例如键值&#xff0c;文档&#xff0c;列族&#xf…

SVN更新数据和提交数据的几个疑问

有以下几个问题&#xff1a; 1.我检出一份副本到本地&#xff0c;修改了几个文件&#xff0c;然后我提交到SVN服务器中&#xff0c;此时服务器是如何更新有关的数据的呢&#xff1f;是不是把原来旧的文件数据删除了&#xff0c;保存最新提交的数据呢&#xff1f; 2.假设我修改…

html转pdf后 框会消失,html或其它文件转pdf弹出打开保存框

第一步&#xff1a;下载wkhtmktopdf软件&#xff0c;安装在指定的目录&#xff0c;如&#xff1a;C:\htmlToPdf\wkhtmltopdf&#xff0c;第二步&#xff1a;把安装好的wkhtmltopdf文件目录加到环境变量Path路径中&#xff0c;public void convertFile(){HttpURLConnection con …

SVN常见问题解答

参加&#xff1a;https://subversion.apache.org/faq.zh.html

用python画一只可爱的皮卡丘_用python画一只可爱的皮卡丘实例

效果图#!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import *绘制皮卡丘头部def face(x,y): """画脸""" begin_fill() penup() # 将海龟移动到指定的坐标 goto(x, y) pendown() # 设置海龟的方向 setheading(40) circle(-150, 69)…

heroku_将应用程序集成为Heroku附加组件

herokuHeroku是流行的“平台即服务”提供商&#xff0c;它为供应商提供了作为附件提供的选项。 Heroku客户可以以多种方式使用附加组件&#xff0c;但是典型的情况是“启动数据库”&#xff0c;“启动MQ”或“启动日志记录解决方案”。 将附加组件添加到您的帐户后&#xff0c;…