Cookie的笔记

来源:互联网 发布:淘宝里的花呗怎么关闭 编辑:程序博客网 时间:2024/06/06 13:57

 0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm 

cookie得机制!

 

 

1.cookie机制

cookie机制采用的是在客户端保持 HTTP 状态信息的方案
Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件。
一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。
底层的实现原理: WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。
一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

2.Servlet程序中使用Cookie
Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各个属性的方法。
Cookie类的方法:
构造方法: public Cookie(String name,String value)
getName方法
setValue与getValue方法
setMaxAge与getMaxAge方法
setPath与getPath方法
HttpServletResponse接口中定义了一个addCookie方法,它用于在发送给浏览器的HTTP响应消息中增加一个Set-Cookie响应头字段。
HttpServletRequest接口中定义了一个getCookies方法,它用于从HTTP请求消息的Cookie请求头字段中读取所有的Cookie项。

3.cookie的发送

1.创建Cookie对象
2.设置最大时效
3.将Cookie放入到HTTP响应报头
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie; 存储在浏览器的内存中,用户退出浏览器之后被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个 Set-Cookie HTTP响应报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此将这个方法称为是addCookie,而非setCookie。


4.会话cookie和持久cookie的区别

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

5.cookie的读取

1.调用request.getCookies
   要获取浏览器发送来的cookie,需要调用HttpServletRequest的getCookies方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。
2.对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止

 

6.跟踪用户上次访问站点的时间

功能:
 帮助网站实现提示客户端计算机上次访问网站的时间
实现原理:
将每一个会话作为一次访问过程,将每次会话的开始时间作为每次访问网站的时间,然后将这个时间以Cookie的形式存储到客户端的计算机中,客户端进行下次访问时通过该Cookie回传上次访问站点的时间值。
为了让Cookie信息在客户端浏览器或计算机关闭后仍然保持存在,Cookie的保存时间被设置为了一年。

cookie小练习:这样使用cookie

实现登陆页面:
首先登陆:login.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 ${requestScope.info}
 <form action="hello.jsp" method="post"">
  name: <input type="text" name="name" />
  password: <input type="password" name="pwd" />
  <input type="submit" value="Submit" />
 </form>
</body>
</html>

cookie的机制:hello.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
 <% //1.获取name的值
 String name =request.getParameter("name");
 String password =request.getParameter("password");
 //2.如果name不为空,说明是页面请求过来的,Hello:name的值,同时更新cookie的信息:新建一个cookie。并设置最大实效,返回客户
 
 if(name!=null){
  out.print("hello"+name);
  Cookie cookie = new Cookie("name",name);
  cookie.setMaxAge(30);
  response.addCookie(cookie);
 
 }
 
 if(password!=null){
 
  out.print("passwor"+password);
  Cookie cookie_ =new Cookie("password",password);
  cookie_.setMaxAge(30);
  response.addCookie(cookie_);
 
 }
//3. 如果name为空,说明直接访问该页面
 else{
  Cookie[] cookies =request.getCookies();
   //如果cookie不为空,hello:cookie的
  if(cookies!=null){
    for(Cookie cookie:cookies){
     if("name".equals(cookie.getName())){
     
      name =cookie.getValue();
    continue;
     }
     if("password".equals(cookie.getName())){
      password = cookie.getValue();
     
     }
    
    }
  
  }
   if(name!=null&& password!=null){
    out.print("hello"+name+",password:"+password);
   
   }
   else{
    request.setAttribute("info","请输入用户名在登陆");
    request.getRequestDispatcher("jksaf.jsp").forward(request,response);
   
   }
 
 
1.cookie机制

cookie机制采用的是在客户端保持 HTTP 状态信息的方案
Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件。
一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。
底层的实现原理: WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。
一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

2.Servlet程序中使用Cookie
Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各个属性的方法。
Cookie类的方法:
构造方法: public Cookie(String name,String value)
getName方法
setValue与getValue方法
setMaxAge与getMaxAge方法
setPath与getPath方法
HttpServletResponse接口中定义了一个addCookie方法,它用于在发送给浏览器的HTTP响应消息中增加一个Set-Cookie响应头字段。
HttpServletRequest接口中定义了一个getCookies方法,它用于从HTTP请求消息的Cookie请求头字段中读取所有的Cookie项。

3.cookie的发送

1.创建Cookie对象
2.设置最大时效
3.将Cookie放入到HTTP响应报头
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie; 存储在浏览器的内存中,用户退出浏览器之后被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个 Set-Cookie HTTP响应报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此将这个方法称为是addCookie,而非setCookie。


4.会话cookie和持久cookie的区别

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

5.cookie的读取

1.调用request.getCookies
   要获取浏览器发送来的cookie,需要调用HttpServletRequest的getCookies方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。
2.对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止

 

6.跟踪用户上次访问站点的时间

功能:
 帮助网站实现提示客户端计算机上次访问网站的时间
实现原理:
将每一个会话作为一次访问过程,将每次会话的开始时间作为每次访问网站的时间,然后将这个时间以Cookie的形式存储到客户端的计算机中,客户端进行下次访问时通过该Cookie回传上次访问站点的时间值。
为了让Cookie信息在客户端浏览器或计算机关闭后仍然保持存在,Cookie的保存时间被设置为了一年。

cookie小练习:这样使用cookie

实现登陆页面:
首先登陆:login.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 ${requestScope.info}
 <form action="hello.jsp" method="post"">
  name: <input type="text" name="name" />
  password: <input type="password" name="pwd" />
  <input type="submit" value="Submit" />
 </form>
</body>
</html>

cookie的机制:hello.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
 <% //1.获取name的值
 String name =request.getParameter("name");
 String password =request.getParameter("password");
 //2.如果name不为空,说明是页面请求过来的,Hello:name的值,同时更新cookie的信息:新建一个cookie。并设置最大实效,返回客户
 
 if(name!=null){
  out.print("hello"+name);
  Cookie cookie = new Cookie("name",name);
  cookie.setMaxAge(30);
  response.addCookie(cookie);
 
 }
 
 if(password!=null){
 
  out.print("passwor"+password);
  Cookie cookie_ =new Cookie("password",password);
  cookie_.setMaxAge(30);
  response.addCookie(cookie_);
 
 }
//3. 如果name为空,说明直接访问该页面
 else{
  Cookie[] cookies =request.getCookies();
   //如果cookie不为空,hello:cookie的
  if(cookies!=null){
    for(Cookie cookie:cookies){
     if("name".equals(cookie.getName())){
     
      name =cookie.getValue();
    continue;
     }
     if("password".equals(cookie.getName())){
      password = cookie.getValue();
     
     }
    
    }
  
  }
   if(name!=null&& password!=null){
    out.print("hello"+name+",password:"+password);
   
   }
   else{
    request.setAttribute("info","请输入用户名在登陆");
    request.getRequestDispatcher("jksaf.jsp").forward(request,response);
   
   }
 
 
 }
 
 
 
 
 %>
</body>
</html>


使用cookie属性的注意问题


属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。 因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。

 }
 
 
 
 
 %>
</body>
</html>


使用cookie属性的注意问题


属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。 因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。