您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
11_会话技术_Cookie_案例_代码实现
发布时间:2022-08-28 23:39:16编辑:雪饮阅读()
其实需求很简单,就是根据某个cookie是否存在,以此来判断用户是首次访问还是非第一次访问。若是非第一次访问则也显示下上次访问时间。
那么这里除了之前要注意的中文乱码问题,还有一个就是时间格式化后的那个”:”问题吧,貌似就是因为这个”:”导致写入cookie失败,所以还是要单独对cookie存储时候进行url编码,然后取出后对cookie进行url解码。
那么实例如:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
Cookie[] cs=request.getCookies();
Boolean hasCookie=false;
Cookie cg=null;
String time=new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss").format(new Date());
String response_txt="";
if(cs!=null){
for(Cookie c:cs){
if(c.getName().equals("lastTime")){
hasCookie=true;
cg=c;
break;
}
}
}
if(hasCookie){
//时间格式化里面的像是“:”这种特殊字符会导致设置这样的值到cookie里面失败,所以设置时候要url编码下,同样的,那么取出来时候也要进行解码下
//据说tomcat8已经解决了中文乱码问题,但我认为像是“:”这样的,应该不属于其之解决问题的范畴吧。所以无论是之前的tomcat7中文乱码还是现在的tomcat8的中文不乱码,都对于这个情况是没有什么关系吧。
response_txt="欢迎回来,你上次访问为:"+ URLDecoder.decode(cg.getValue(),"utf-8");
cg.setValue(URLEncoder.encode(time,"utf-8"));
//相同名的cookie会自动覆盖而非新增(但不同作用域则可能规则不同,比如全局作用域/和非全局作用域/page1这类,当然这括号里面的都是哥的直觉推理)
response.addCookie(cg);
}
else{
//可能会遭遇 An invalid character [32] was present in the Cookie value类似这样的错误,则需要在设置cookie前进行url编码
Cookie c1=new Cookie("lastTime", URLEncoder.encode(time,"utf-8"));
//setMaxAge接收的参数是时间,单位是秒,这里设置为1个月(非自然月) ,有了时间才能持久化
c1.setMaxAge(60*60*24*30);
response_txt="欢迎你首次访问";
response.addCookie(c1);
}
response.getWriter().write(response_txt);
}
关键字词:会话技术,Cookie,案例,代码实现