Cookie技术讲解
作者:互联网
Cookie
由服务器创建
服务器在接受了请求之后,将Cookie根据响应发给浏览器,浏览器存住Cookie,下次请求访问服务器时候,带着cookie来,告诉服务器我原来来过了
相当于你办理一个会员卡,第一次去理发店,办理了一个会员卡,下去接着去带着会员卡去让理发店元知道,原来你小子来过呀!
发送Cookie
package cn.itcast.cookie;
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;
@WebServlet("/ServletCookie")
public class ServletCookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("msg","hello");//创建一个cookie
response.addCookie(cookie);//发送cookie将response里面存放cookie
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
想要获取Cookie
package cn.itcast.cookie;
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;
@WebServlet("/ServletCookie2")
public class ServletCookie2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();//获取Cookie
if (cookies != null){
for (Cookie cookie:cookies
) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name + " ---" + value);
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
Cookie
案例
案例需求:
1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
特殊符号在Cookie传递过程中,要考虑编码和解码问题
cookie不太支持特殊符号,所以传递特殊符号时候要进行
URL编码和解码工作
package cn.itcast.cookie;
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.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/ServletTestCookie")
public class ServletTestCookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//判断request里面是不是有一个叫lasttime的cookie
//如果没有cookie,或者cookie中不包含lasttime标签,都说明是第一次进行登录
Cookie[] cookies = request.getCookies();
response.setContentType("text/html;charset=utf-8");
//遍历cookies数组
boolean flag = false;//设置一个标签去看看,cookie中有没有又没lasttime标签,
if(cookies != null){
for (Cookie cs : cookies
){
String name = cs.getName();//获取cookie名称
//看一下名称里有没有是否是lasttime
if("lastTime".equals(name)){
//表示不是第一次访问
//响应数据
flag = true;//如果其中有lasttime,那么将flag编程rtue
String value = cs.getValue();
value = URLDecoder.decode(value,"utf-8");
System.out.println("解码之后输出" + value);
response.getWriter().write("你好欢迎回来,上次登录时间是" + value);
cs.setMaxAge(60*60*30*24);//设置cookie持久化存储
//同时获取当前时间的cookie,重新发送给浏览器存储起来
Date date = new Date();//获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
//相当于给一个系统日期,你给变成想要的日期
String lasttime = sdf.format(date);//给定一个规整格式,传一个系统参数,然后转化为你想要的格式
//相当于将日期Date函数转化成为了字符串
lasttime = URLEncoder.encode(lasttime, "utf-8");//对cookie中携带信息进行url编码
//编码后进行重新赋值
System.out.println("上面编码之后输出" + lasttime);
cs.setValue(lasttime);//重新设置好cookie值
response.addCookie(cs);//将当前时间发还给浏览器留着下次用
break;
}
}
}
if (cookies == null || flag == false){//cookie中没有值,获取cookie中没找到lasttime,说明用户第一登录
response.getWriter().write("你好欢迎登录");
//然后建立一个cookie,cookie中设定好时间,发给浏览器
//同时获取当前时间的cookie,重新发送给浏览器存储起来
Date date = new Date();//获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
//相当于给一个系统日期,你给变成想要的日期
String lasttime = sdf.format(date);//给定一个规整格式,传一个系统参数,然后转化为你想要的格式
//相当于将日期Date函数转化成为了字符串
lasttime = URLEncoder.encode(lasttime,"utf-8");
System.out.println("第二次编码后输出" + lasttime);
Cookie cookie = new Cookie("lastTime",lasttime);
//重新设置好cookie值
cookie.setMaxAge(60*60*30*24);//设置cookie持久化存储
response.addCookie(cookie);//将当前时间发还给浏览器留着下次
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
标签:讲解,技术,cookie,Cookie,import,lasttime,servlet,javax 来源: https://blog.csdn.net/qq_40707269/article/details/110861612