Cookie VS Session

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保存在服务器上,如果访问过多,会占用服务器性能。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值