Cookie知识点整理

Cookie是什么
Cookie是客户端技术,服务器将每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

在HTTP中他表示服务器送给客户端的小甜点,其实Cookie就是一个键和一个值构成的。随着服务器端的响应发送给客户端浏览器,然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

Cookie是服务器创建,然后通过响应发送给客户端的一个键值对,客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie),当客户端向服务器发出请求时,会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了的。

Cookie的常用方法
创建Cookie
Cookie(String,String)

Cookie方法
getName
getValue
setMaxAge

存取Cookie
通过请求取 getCookies
通过响应存 addCookie

Cookie的获取和设置
Java中有一个专门的java.servlet.http.cookie类,可以通过操作该类来进行cookie的获取和设置,Cookie可以通过request.getCookie()来获取,获得的是一个cookie数组,同时通过response.addCookie(cooki)向客户端浏览器设置cookie

cookie的有效期,修改和删除。
有效期
Cookie有效期的设置方法为:Cookie.setMaxAge(maxAge);
maxAge设置的时间即为cookie的有效期。一般以秒为单位。
比如设置的时间为60,那么cookie的有效期为60秒。不随浏览器的关闭而消失。
加入关闭浏览器又重新打开,那么此时若还没有到60秒,这个时候可以获取该cookie。

加入maxAge设置为-1,此时cookie的有效期随浏览器的关闭而清除。

修改
通过方法重新设置一次cookie,就是cookie的修改。但是除了cookievalue,和maxage其它配置不能修改,否则,cookie为不同的cookie。
Response.addCookie(cookie);

cookie的删除
将cookie的有效期设置为0.

cookie的安全属性
设置cookie时,将cooKie的Secure属性设置为true;
通过将设置cookie的setSecure(true);

案例:显示上次访问时间
l 创建Cookie,名为lasttime,值为当前时间,添加到response中;
l 在AServlet中获取请求中名为lasttime的Cookie;
l 如果不存在输出“您是第一次访问本站”,如果存在输出“您上一次访问本站的时间是xxx”;
AServlet.java

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
     response.setContentType("text/html;charset=utf-8");
     Cookie cookie = new Cookie("lasttime", new Date().toString());
     cookie.setMaxAge(60 * 60);
     response.addCookie(cookie);
     Cookie[] cs = request.getCookies();
     String s = "您是首次访问本站!";
     if(cs != null) {
     for(Cookie c : cs) {
         if(c.getName().equals("lasttime")) {
            s = "您上次的访问时间是:" + c.getValue();
       }
     } 
   }
   response.getWriter().print(s);
}

Cookie中保存中文
Cookie的name和value都不能使用中文,若希望在Cookie中使用中文,那么需要先对中文进行URL编码,然后把编码后的字符串放入Cookie中
向客户端响应中添加Cookie

String name=URLEncoder.encode(“姓名”,”UTF-8”);
String value=URLEncoder.encode(“张三”,”UTF-8”);
Cookie c=new Cookie(name,value);
c.setMaxAge(60*60);
response.addCookie();

从客户端请求中获取Cookie

    response.setContetype(“text/html;charset=utf-8”);
    Cookie cs[]=request.getCookie();
    if(cs!=null){
      for(Cookie c:cs){
          String    name=URLEncoder.decode(c.getName(),”UTF-8”);
          String    value=URLEncoder.decode(c.getValue(),”UTF-8”);

          String s=name+”:”+value;
         response.getWriter().print(s);
    }
}

显示曾经浏览过的商品
index.jsp

  <body>
    <h1>商品列表</h1>
    <a href="/day06_3/GoodServlet?name=ThinkPad">ThinkPad</a><br/>
    <a href="/day06_3/GoodServlet?name=Lenovo">Lenovo</a><br/>
    <a href="/day06_3/GoodServlet?name=Apple">Apple</a><br/>
    <a href="/day06_3/GoodServlet?name=HP">HP</a><br/>
    <a href="/day06_3/GoodServlet?name=SONY">SONY</a><br/>
    <a href="/day06_3/GoodServlet?name=ACER">ACER</a><br/>
    <a href="/day06_3/GoodServlet?name=DELL">DELL</a><br/>

    <hr/>
    您浏览过的商品:
    <%
     Cookie[] cs = request.getCookies();
     if(cs != null) {
     for(Cookie c : cs) {
     if(c.getName().equals("goods")) {
     out.print(c.getValue());
             }
         }
     }
    %>
  </body>

GoodServlet

public class GoodServlet extends HttpServlet {
     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
       String goodName = request.getParameter("name");
       String goods = CookieUtils.getCookValue(request, "goods");
       if(goods != null) {
          String[] arr = goods.split(", ");
          Set<String> goodSet = new LinkedHashSet(Arrays.asList(arr));
          goodSet.add(goodName);
          goods = goodSet.toString();
          goods = goods.substring(1, goods.length() - 1);
       } else {
        goods = goodName;
       }
     Cookie cookie = new Cookie("goods", goods);
     cookie.setMaxAge(1 * 60 * 60 * 24);
     response.addCookie(cookie);
     response.sendRedirect("/day06_3/index.jsp");
    }
}

CookieUtils

public class CookieUtils {
      public static String getCookValue(HttpServletRequest request, String name) {
        Cookie[] cs = request.getCookies();
        if(cs == null) {
            return null;
        }
      for(Cookie c : cs) {
        if(c.getName().equals(name)) {
           return c.getValue();
        }
     }
    return null;
   }
}

参考博客:
http://blog.csdn.net/qq_26676207/article/details/52671594

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值