Cookie解析

cookie是服务器发送给浏览器的信息,以便用户登录,服务器获取相应信息

当浏览器第一次访问一个网站时,无cookie发送,此时服务器会默认发送一个JSESSIONID=32位16进制数

当浏览器再次访问该站点时,会将本地保存的未过期的cookie信息发送给服务器


一:cookie的创建:

      cookie由javax.servlet.http.Cookie类提供构造方法

     cookie是一组key=value值

     new Cookie(key,value)即可造出对象

    cookie方法:

                  cookie.setMaxAge(int);在客户端保存的有效时间,以秒为单位。

                                                         Cookie保存的时间通过设置setMaxAge来设置 (默认值为-1)

                                                        如果大于0,就表示在客户机的硬盘上保存N秒。

                                                        如果小于0,就表示不将Cookie保存到客户机的硬盘上,当浏览器关闭时,Cookie当即消失。

                                                        如果 等于 0 ,就表示删除保存在客户机上的 Cookie 。(对于cookie,服务器只是设置标记,浏览器会根据标记处理)

                cookie.setPath(“/”);设置Cookie的有效使用域。默认为当前,"/"表示tomcat所有servlet都可访问

                                                      path是设置cookie的访问权限,每一个servlet在web.xml都有地址映射,而cookie的path理论是相当于命名空间的合法字符串即可,但是由于

                                                     servlet地址映射,servlet只能访问地址映射的本身或父级目录空间的cookie

                                                        例如:servlet的映射地址为/aa/bb/cc,那么cookie的path需要设置在/(tomcat下)    /request.getContextpath(项目下)     /aa或者/aa/bb或者

                                                                     /aa/bb/cc,此时servlet才能访问到,path可能设/dd/ee//ff之类的合法字符串,但是servlet却无法访问,这样的cookie创建又有何用呢?

                 

                setDomain (“. hncu.cn ”);// 设置对使用了 hncu.cn 一级域名的所有二级域名有效。应该配合 setPath (“/”); 共同使用。
               
                setSecure ( true|false ); 默认值为 false ,是否只支持 http s ,setHttpOnly(true|false):首先由MS推出此属性,后来被各浏览器支持。已经纳入servlet3.0规范

    cookie中文问题:
            Cookie解析_第1张图片
cookie的使用代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		//向客户端写cookie
		Random r = new Random();
		int n = r.nextInt(100);
		String name = "Jack";//cookie的格式:key=value
		//Cookie c = new Cookie("name"+n,name+n);
		Cookie c = new Cookie("name",name+n);
		c.setMaxAge(60*60);//过期时间,以秒为单位
		c.setPath( request.getContextPath() );//该路径是:cookieSessionWeb/   
		// Cookie机制中,是通过path来控制权限。只有和该path相同或是它的子路径的servlet才能够访问该cookie。
		//如果把一个cookie的path设为项目根目录即ContextPath(),那么该项目下的所有servlet都能够访问到它。
		response.addCookie(c);
		
		//这一段演示cookie中带中文
		String str="aa中文";
		str = URLEncoder.encode(str,"utf-8");//urlencode编码
		Cookie cStr = new Cookie("str",str);
		cStr.setPath("/");//路径设为“/”时,整个Tomcat下的项目都能访问到该cookie
		response.addCookie(cStr);
		
		//读取客户端发来的cookie
		Cookie cs[] = request.getCookies();//读取cookie
		if(cs!=null){
			for(Cookie cc:cs){
				String nm = cc.getName();
				String val = cc.getValue();
				val =URLDecoder.decode(val, "utf-8");//中文就解码,ascii码则是原样
				out.println(nm+"="+val+"
"); } } out.println("Cookie保存成功!"); }

cookie删除:
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		Cookie cs[] = request.getCookies();
		if(cs!=null){
			for(Cookie c:cs){//要想遍历到“name”这个cookie,当前servlet必须要有读权限,即servlet的url-pattern必须是该cookie所设路径的相同路径或子路径
				if(c.getName().equals("name")){
					//删除cookie
					c.setPath( request.getContextPath() );//删除时是通过这一句来判断权限的,必须和原来设的路径完全一样,否则不能删除
					c.setMaxAge(0);//到期时间设为0,即是删除--此处只是设置删除标记
					response.addCookie(c);//把代表删除的cookie发送给客户端,就可以执行删除了!
				}
			}
		}
	}

Cookie解析_第2张图片


你可能感兴趣的:(Web)