Cookie简析

Cookie

可以用来记录多个请求之间的联系,保存服务器的状态

实现一个记住用户名的功能

1 创建Cookie

    //1.获取表单参数
    // 表单默认是get方式,如果是get方式可以不用设置编码格式,中英文都可以,但如果是post方式,就要设置编码格式,         
    //否则会出现乱码
    req.setCharacterEncoding("utf-8");
    //获取表单提交的name值
    String na = req.getParameter("name");
    //在控制台打印出来,方便观察,无其他效果
    System.out.println(na);
    /*2.进行编码,cookie存入中文,需要编码成URLEncoder.encode,有些版本不需编码,考虑到通用性 ,编码成cookie认可的格式  */
    String encode = URLEncoder.encode(na, "utf-8");
    //打印出编码后的效果,如果是英文则原样不变,如果是中文将变成一串编码
    System.out.println(encode);
    //3.根据编码后的结果创建cookie
    Cookie name = new Cookie("name", encode);
    //没有指定时间时间的cookie,称为会话cookies,浏览器关闭就会删除,以秒为单位,3600即一小时
    name.setMaxAge(3600);
    //传给浏览器的cookie
    resp.addCookie(name);
    //浏览器页面提示,编码是为了浏览器能识别接受的中文信息
   resp.setContentType("text/html;charset=utf-8" );
    resp.getWriter().println("<html><body>浏览器接收到cookie</body></html>");
    //解码,变为浏览器可以识别的编码格式
 
//如果要将获取的值通过jsp展示给页面,需要解码,因为上面编码了,如果英文没有经过编码
   //或者某些版本对中文没有要求可以存入,不需要写编码这一步,当然这里也就自然不需要解码
    String decode = URLDecoder.decode(String.valueOf(name.getValue()), "utf-8");
   //将解码的值放入作用域
   req.setAttribute("name",decode);
   //请求转发,到Cookie1.jsp
    req.getRequestDispatcher("Cookie1.jsp").forward(req,resp);
    }

}

Cookie1.jsp中如下
<%--如果是值是英文或者中文可以不用编码的版本,也就不需要解码,就可以直接在jsp中获取,无需请求转发,因为cookie存储在浏览器中--%>
  ${cookie.name.value}
 <%--通过el表达式获取作用域的值展示给浏览器--%>
${name}

2 获取cookie

Cookie[] cookies = request.getCookies(); // 获取请求中所有的cookie

@WebServlet(urlPatterns = "/s2")
public class Cookie2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Cookie[] cookies = req.getCookies();
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + " " + URLDecoder.decode(cookie.getValue(),"UTF-8" ));            
    }
}

}

3 中文问题

URLEncoder.encode(中文, “utf-8”); // 将编码后的中文存入cookie的值
URLDecoder.decode(“编码后的内容”, “utf-8”); // 把编码后的内容进行解码

4 el表达式获取cookie值

el的语法:
${cookie.cookie的名称.value}
也可以通过表达式 :<%=“需要传的值”%>来展示给浏览器,如果需要解码,提前完成将最终的值传入

  Cookie1.jsp中如下
<%--如果是值是英文或者中文可以不用编码的版本,也就不需要解码,就可以直接在jsp中获取,无需请求转发,因为cookie存储在浏览器中--%>
  ${cookie.name.value}
 <%--通过el表达式获取作用域的值展示给浏览器--%>
${name}

5 cookie的限制

浏览器每个域名下能够包含30~50个cookie
每个cookie的长度大约是4k左右

6.cookie心得:

cookie安全性差,可以通过浏览器查询到存入的cookie值,cookie值只在当前浏览器有效。并且关闭浏览器后存入cookie值自动清除 ,除非setMaxAge(时间),如本节第一个例子中设置为3600秒,即一个小时后才会清除cookie值,这样关闭浏览器后重新打开依然有效。后面我们还会接触session,存储在服务器端,安全性更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值