Cookie
将用户信息保存到客户端浏览器的一门技术,是服务器写给浏览器的一张小纸条,由服务器来写,浏览器来保存
1.由HTTP协议制定,适用于Java、安卓、IOS
有保存上限:一个浏览器上保存Cookie有上限、一个网站在浏览器上保存有上限
Cookie的名字和内容大小有上限
不能跨浏览器
不能直接传中文:URLEncoder.encode("你好","utf-8") URLDecorder.decode("utf-8","你好")
http响应两种方式:
response.setHeader("Set-Cookie", "username=张三 ");
Cookie cookie = new Cookie("username","李四");
2.分类
会话级别Cookie:保存到浏览器;关闭浏览器Cookie过期销毁
持久化级别Cookie:把内存中数据永久保存在硬盘中
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置持久化级别的Cookie
Cookie cookie = new Cookie("username", "wangwu");
//在硬盘中存在一分钟
cookie.setMaxAge(60);
//立即销毁
//cookie.setMaxAge(0);
//默认为-1
//cookie.setMaxAge(-1);
response.addCookie(cookie);
}
3.有效路径
setPath():设置有效路径,包含项目名
如果浏览器的访问包含或等于Cookie的有效路径,就会生成对应Cookie
public class Demo4Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie c1 = new Cookie("key1","value1");
Cookie c2 = new Cookie("key2","value2");
c1.setPath(request.getContextPath()+"/");
c1.setPath(request.getContextPath()+"/hehe/");
response.addCookie(c1);
response.addCookie(c2);
}
}
例子:VisitServlet设置Cookie;ShowServlet访问获得VisitServlet中的数据
VisitServlet设置Cookie:服务器想浏览器传递一个小纸条
public class VisitServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
//记录用户访问时间
Cookie cookie = new Cookie("lastTime",new Date().getTime()+"");
response.addCookie(cookie);
}
}
ShowServlet获得Cookie对象
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//获得Cookie数组
Cookie[] cookies = request.getCookies();
//如果不为0,进行遍历
if(cookies!=null){
for (Cookie c : cookies) {
//如果name为lastTime,获得对应时间,响应在页面上
if(c.getName().equals("lastTime")){
String value=c.getValue();
Date date = new Date(Long.parseLong(value));
//System.out.println(date.toLocaleString());
response.getWriter().write(date.toLocaleString());
}
}
}
}
}
Session
会话范围的域对象,保存在服务器,针对某浏览器的N次请求。就好比是我们办理的银行卡我们自己手中有,同时银行也有我们每次使用的记录一样,所以Session是建立在Cookie基础上的。
生命周期:
开始:第一次调用request.getSession()
结束:主动销毁session.invalidate;服务器非正常关闭;30分钟无操作
例子:一次性验证码,将我们输入的验证码与正确的验证码进行对比,如果一致则成功,否则失败
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、接收参数
//接收用户输入的验证码
String form_yzm=request.getParameter("yzm");
//接收正确的验证码
String right_yzm=(String) request.getSession().getAttribute("yzm");
//让session中正确验证码作废。删除
request.getSession().removeAttribute("yzm");
//2、业务
if(form_yzm!=null && right_yzm!=null
&&form_yzm.equals(right_yzm)){
//验证成功
response.getWriter().write("success");
}else{
//验证失败
response.getWriter().write("error");
}
}
推荐:《Cookie和Session的区别》
小结:Cookie是放在浏览器端的,Session是放在服务器端的,别人可以分析本地Cookie并欺骗,所以不是很安全,Session保存在服务器上,如果访问过多,会占用服务器性能。