zoukankan      html  css  js  c++  java
  • Cookie 的运用

    Cookie的原理是通过Set-Cookie响应头和Cookie请求头将会话中产生的数据保存在客户端。--- 底层(SUN公司已经给我们提供了一套API)

    Cookie是将需要保存的数据保存在了客户端, 是客户端技术. 每个客户端各自保存各自的数据, 再次访问服务器时会带着自己的数据, 每个客户端持有自己的数据, 因此就不会发生混乱了。

    ~~ 客户端可以存放300个左右Cookie,每个站点最多存放20个Cookie,每个Cookie的大小不能超出4KB ~~

    创建Cookie:

     1 //在http请求(iso8859-1)中没有中文存在,则在输入中文用户名时再添加到cookie中,会出现编码问题。
     2 //在没有编码之前服务器将会以iso8859-1的码表来解析username数据。则需要对存入cookie的数据进行URL编码;
     3             
     4 //将用户名保存在Cookie中
     5 Cookie cookie = new Cookie("username", URLEncoder.encode(username, "utf-8"));
     6 //设为保存7天
     7 cookie.setMaxAge(3600*24*7);
     8 //设置站点携带cookie的路径path---将设置成站点的所有页面都会携带cookie值访问后台
     9 cookie.setPath(request.getContextPath()+"/");
    10 //发送cookie
    11 response.addCookie(cookie);

    在JSP中获取指定的Cookie:

     1 <%
     2 /** 获取后台发来的cookie值 **/
     3 Cookie[] coo = request.getCookies();
     4 String username ="";
     5 if(coo != null){
     6     for(Cookie cs:coo){
     7         if("username".equals(cs.getName())){
     8             username = cs.getValue();
     9             /*取出数据时需要对数据进行解码。* **/
    10             username = URLDecoder.decode(username, "utf-8");
    11         }else{
    12             username ="";
    13         }
    14     }
    15 }
    16 
    17 
    18 %>
    通过el表达式可直接在JSP页面获取username的值:${ cookie.username.value }
    但是需要通过JS来解决解码乱码问题:
      //在记住密码后再次登录解决乱码问题
        var $username = $("input[name='username']");
        //默认只能用utf-8来解码
        var deuser = decodeURI($username.val());  
        //将解码后的数据回写到输入框内
        $username.val(deuser);

    删除Cookie:

      ~~现在还没有这=直接删除Cookie的方法。 只能创建一个跟要删除的那个Cookie的名称、path、domain(基本不考虑使用)一致的Cookie来取代或覆盖那个要删除的Cookie,并将新创建的Cookie的 setMaxAge(0)

      ~~需要注意的是 名称、path、domain(基本不考虑使用)一定要一致,不然就会当成是从重新创建了个新的Cookie;

    //将cookie清除掉
    Cookie cookie = new Cookie("username", "");
    
    cookie.setMaxAge(0);
    
    cookie.setPath(request.getContextPath()+"/");
    
    response.addCookie(cookie);

    总结:客户端每次访问服务器端都会携带Cookie到服务器端,服务器端通过request对象来遍历获取指定的Cookie并对其进行处理。

        在addCookie执行之后服务器将对发送的数据用iso8859-1的码表来对其进行编码。则需要在发送Cookie之前就要对数据进行URL编码操作(URLEncoder.encode(String name,String enc))。

        然而在获取Cookie的值时也需要对其进行URL解码(URLDecoder.decode(String name,String enc))。

        当然,在这个过程中,URL的编码和解码一定是相同的码表,不然就会乱码。

  • 相关阅读:
    A:hover,A:visited 和A:active的区别
    什么是UrlEncode
    ERP系统BOM详细解析(一)
    ERP术语 [转]
    ERP理论的形成
    MRP的計算步驟
    ERP系统模块完全解析──物料编码分章(一)
    Transact SQL 常用语句以及函数
    SQL 2000中的触发器使用
    修改docker0默认IP地址
  • 原文地址:https://www.cnblogs.com/tongxuping/p/6912449.html
Copyright © 2011-2022 走看看