Cookie的使用(14)

一:cookie的简要介绍:

(1)什么是cookie

a、cookie是一种客户端的状态管理技术b、当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。

(2)如何创建一个cookie

Cookie c = new Cookie(String name,String value);response.addCookie(c);默认情况下,cookie保存在浏览器内存中

(3)cookie的查询

Cookie[] cookie = request.getCookies();

注意:该方法有可能返回nullString cookie.getName():查找cookie的名字String cookie.getValue():查找cookie的值

(4)cookie的生存时间

cookie.setMaxAge(int seconds):cookie的保存时间seconds>0:浏览器会将cookie保存在硬盘上,超过指定时间会删除该cookieseconds<0:缺省值,只将cookie保存在内存中,只要浏览器不关闭,cookie就一致保存,浏览器一旦关闭,cookie就会被清空。seconds=0:立即删除cookie,如要删除一个叫userID的cookie,那么可以这么做:Cookiec = new Cookie("userID","");c.setMaxAge(0);response.addCookie(c);

(5)cookie的编码问题

cookie只能保存ascii字符,对于不合法的字符(如中文)需要转换成ascii码

例:Cookie cookie3 = new Cookie("realname",URLEncoder.encode("姓名","utf-8"));

(6)cookie的路径问题

a、什么是cookie的路径问题?浏览器在向服务器发送请求时,会比较cookie的路径要与访问的服务器的路径是否匹配,只有匹配的cookie才会发送给服务器。b、cookie的默认路径默认路径等于创建该cookie的组件路径c、匹配规则浏览器要访问的路径必须是cookie的路径或者其子路径时,才会发送对应的cookied、设置cookie的路径cookie.setPath(String path)如:cookie.setPath("/appname");这样保证这个cookie可以被整个web应用访问。

(7)cookie域

setDomain:设置cookie域,指的是访问某个域的时候,才会带入cookie,访问其他域,不会带入cookie。默认会禁止该设置,因为安全性较差,如,访问baidu.com,baidu.com写一个域是google.com的cookie,那么访问google.com的时候会带入baidu.com的cookie,从而会实现攻击的效果。

(8)cookie的限制

a、cookie可以被用户禁止b、cookie不完全,敏感数据,比如密码、账号等需要加密。c、cookie的大小有限制,大约为4K左右d、cookie的个数也有限制,大约是300个左右e、每个站点最多保存20个cookief、cookie只能够保存字符串。

二:用cookie实现三天免登陆:

创建cookie时的代码:(在第一次登陆时的用户检测的servlet上)

protected void service(HttpServletRequest req,HttpServletResponse resp) 
	throws ServletException,IOException{
		resp.setContentType("text/html;charset=utf-8");
		String uname=req.getParameter("username");
		String password=req.getParameter("password");
		Check ck=new Check();
        User u=null;
        try {
			u=ck.check(uname, password);
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
        if(u==null) {
        	req.getRequestDispatcher("Login").forward(req, resp);
        	//System.out.println("this is a test");
        	//resp.getWriter().write("用户名或密码错误");
        }else {
        	Cookie c=new Cookie("uname",u.getUname());
        	c.setMaxAge(3*24*3600);
        	resp.addCookie(c);
        	resp.sendRedirect("Main");
        }
	}

}

  

cookie检测代码:

	protected void service(HttpServletRequest req,HttpServletResponse resp) 
			throws ServletException,IOException{
		Cookie[] cks=req.getCookies();
		String ckv=null;
		User Uck=new User();
		Check ck=new Check();
		if(cks!=null) {
			for(Cookie c:cks) {
				if("uname".equals(c.getName())) {
					ckv=c.getValue();
					System.out.println(ckv);
				}
			}
			try {
				Uck=ck.check(ckv);
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		
			if(ckv==null){//检查ckv是否是空,排除只有键,没有值得情况。
			resp.sendRedirect("Login");	
			}
			if(Uck==null) {//检查Uck是否为空,排除在cookie有效期内,数据在数据库中被删除的况
				resp.sendRedirect("Login");
			}else {
				resp.sendRedirect("Main");
			}
		}else {
			req.getRequestDispatcher("Login").forward(req, resp);
		}
			}

}

三:运行效果:

第一次登录时:

第二次登陆时:

源代码:

链接:https://pan.baidu.com/s/1SADXDyNFq-ICc4NXFEMJNw
提取码:95th
复制这段内容后打开百度网盘手机App,操作更方便哦

 

转载于:https://www.cnblogs.com/ykh-study/p/10653261.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值