今天重新学习Cookie的知识。首先理解Cookie这个东西就像是你去Vip场所一样。第一次去,没有vip卡,去了之后是没有VIP卡的待遇。当你办了vip卡之后,第二次去,人家看你办了卡,对你的待遇立马提升,并且在VIP卡里积分。
用专业知识讲,就是在浏览器和服务器进行会话时,首先浏览器会给服务器发送cookie信息,如下图
服务器会接收请求,判断是否有需要的cookie 信息,根据需要创建新的Cookie发送给浏览器,浏览器对cookie信息进行保存。如下图。
在浏览器第二次请求服务器的时候,会将原本和新的cookie一起发送给服务器,服务器根据需要进行处理
在下面的代码中,是记录浏览器访问服务器的上一次时间。当第一次访问时,提示第一次访问,当浏览器第二次访问时,记录上次访问的时间。这里采用直接在浏览器中访问服务器。
package cn.itcast.chapter05.coolie.example;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LastAccessServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public LastAccessServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置服务器输出内容的编码格式
response.setContentType("text/html;charset=utf-8");
String lastAccessTime = null;
//获取cookie
Cookie[] cookies = request.getCookies();
//遍历cookie,判断是否有lastAccessTime这个键
for(int i = 0; i < cookies.length ; i++){
if("lastAccessTime".equals(cookies[i].getName())){
lastAccessTime = cookies[i].getValue();
}
}
//如果有,在浏览器中显示上次登录时间
if(lastAccessTime != null){
response.getWriter().write("上次登录时间是:"+lastAccessTime);
}else{//如果没有显示第一次登陆
response.getWriter().write("这是第一次登录");
}
//读取本次时间,添加到cookie中
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = simple.format(new Date());
Cookie cookie = new Cookie("lastAccessTime",time);
response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}