Servlet第五篇Cookie

Posted kwdlh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet第五篇Cookie相关的知识,希望对你有一定的参考价值。

Cookie的基本使用

public class MyServletA extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        Cookie cookie = new Cookie("name", URLEncoder.encode("张三", "utf-8"));
        cookie.setMaxAge(1000);
        resp.getWriter().write("服务器返回了Cookie!");
        resp.addCookie(cookie);
    }
}
public class MyServletB extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("服务器拿到Cookie:");
        Cookie[] cookies = req.getCookies();
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                resp.getWriter().write(name + "------" + URLDecoder.decode(cookie.getValue(), "utf-8") + "  ");
            }
    }
}

Cookie的有效期

通过setMaxAge(int expiry)进行设置

  1. expiry为正数,浏览器会把Cookie写到硬盘中,只要还在expiry秒之前,登陆网站时该Cookie就有效。
  2. expiry为负数,浏览器不会把Cookie写到硬盘中,Cookie是临时性的,仅在本浏览器内有效,默认值为-1。
  3. expiry为0,相当于删除Cookie。Cookie机制没有提供删除Cookie对应的方法,把expiry设置为0等同于删除Cookie。

Cookie的方法

setPath(String uri),只有该资源路径才能获取Cookie

Cookie记录上次登录时间

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        Cookie[] cookies = req.getCookies();
        if(cookies==null){
            resp.getWriter().write("第一次访问!");
        }else{
            resp.getWriter().write("上次访问时间:");
            for (Cookie cookie : cookies) {
                if ("previousTime".equals(cookie.getName())) {
                    System.out.println(cookie.getValue());
                    resp.getWriter().write(URLDecoder.decode(cookie.getValue(),"utf-8"));
                    break;
                }
            }
        }
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = simpleDateFormat.format(new Date());
        String encode = URLEncoder.encode(time,"utf-8");
        Cookie cookie=new Cookie("previousTime",encode);
        resp.addCookie(cookie);
    }

注意事项:

Cookie cookie=new Cookie(String name,String value)的value值中不能包含特殊字符,包括分号(;)、逗号(,)、等号(=)以及空格( )等。如果有特殊符号,则会报500

解决方案:

方案1. 如上: 先进行URLEncoder.encode(str,"utf-8"),在URLDecoder.decode(str,"utf-8")

方案2. 使用resp.setHeader("Set-Cookie","name=tom")

以上是关于Servlet第五篇Cookie的主要内容,如果未能解决你的问题,请参考以下文章

Servlet第五篇Response总结

第五篇:函数

python学习第五篇 常用模块

Python开发第五篇:函数

开始写游戏 --- 第五篇

Spring第五篇