码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet第五篇【Cookie】

时间:2020-04-05 20:09:33      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:decode   text   code   基本使用   删除cookie   默认值   strong   ted   lan   

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】

标签:decode   text   code   基本使用   删除cookie   默认值   strong   ted   lan   

原文地址:https://www.cnblogs.com/kwdlh/p/12638587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!