Cookie
1、Cookie是会话管理的一种,还有一种是Session。
2、Cookie将数据保存在客户端,即浏览器中(不同的浏览器,可以看成不同的客户端),所以Cookie是不能够跨浏览器存储数据的。
3、Cookie的实现原理
Cookie小demo之显示用户上次访问的时间
/**
* 显示上一次用户访问的时间
* @author 紫炎易霄
*/
@WebServlet("/lastTimeShow")
public class TimeCookie extends HttpServlet{
//定义一个Cookie的key值
private static final String LAST_ACCESS_TIME = "LAST_ACCESS_TIME";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");// 防止浏览器显示乱码
//1、获取Cookie
Cookie[] cookies = req.getCookies();
String value = null;
if(cookies != null){
//遍历Cookie
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(LAST_ACCESS_TIME.equals(cookie.getName())){
//2、如果有Cookie直接获取,并且发送给客户端
value = cookie.getValue();
resp.getWriter().write(value);
break;
}
}
}
if(value == null || value.isEmpty()){
resp.getWriter().write("欢迎您第一次访问我们的网页!");
}
value = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
//3、如果没有Cookie,那么创建一个新的时间发给客户端
Cookie cookie = new Cookie(LAST_ACCESS_TIME,value);
//4、更新一个新的时间存入到Cookie中
resp.addCookie(cookie);
}
}
运行结果
Cookie小demo之自动登陆
用户名:紫炎易霄
密码:123456
/**
* 实现自动登陆的cookie
* @author 紫炎易霄
*/
@WebServlet("/LoginCookie")
public class LoginCookie extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");// 防止浏览器显示乱码
String username = req.getParameter("username");
String password = req.getParameter("password");
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("token")&&cookie.getValue().equals("token")){
req.getRequestDispatcher("/success.jsp").forward(req, resp);
}
}
if(username.equals("紫炎易霄")&& password.equals("123456")){
Cookie cookie = new Cookie("token", "token");
//设置一天
cookie.setMaxAge(60*60*24);
resp.addCookie(cookie);
req.getRequestDispatcher("/success.jsp").forward(req, resp);
}
}
}
运行结果