javaWeb基础之Cookie

Posted 知道什么是码怪吗?

tags:

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

运行环境

系统:windows

服务器:Tomcat 8.0.50

IDEA:2021.3版本

目录

什么是Cookie?

Cookie的创建

Cookie的获取

获取特定的Cookie

Cookie的修改

Cookie的删除

Cookie生命控制

Cookie有效路径

Cookie的实际应用


什么是Cookie?

Cookie是服务器通知客户端保存键值对的一种技术,客户端有了Cookie之后,每次请求都发送给服务器,并且每个Cookie的大小不能超过4kb。

Cookie的创建

protected void creatCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 

        //创建cookie对象
        Cookie cookie1 = new Cookie("key1", "value1");
        Cookie cookie2 = new Cookie("key2", "value2");
        Cookie cookie3 = new Cookie("key3", "value3");
        //通知客户端保存cookie
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);
        resp.addCookie(cookie3);

    

Cookie的获取

protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        //获取所有的Cookie
        Cookie[] cookies = req.getCookies();

        //遍历输出到页面上
        for (Cookie cookie : cookies) 
            //resp.getWriter().write("Cookie[" + cookie.getName() + "] = " + cookie.getValue() + "<br>");//输出到网页
            System.out.println("Cookie[" + cookie.getName() + "] = " + cookie.getValue());//输出到控制台
               
    

获取特定的Cookie

//查找指定名称的Cookie对象,找到了返回Cookie,没找到返回null
    public static Cookie findCookie(String name, Cookie[] cookies) 
        if (name == null || cookies == null || cookies.length == 0)
            return null;
        for (Cookie cookie : cookies) 
            if (name.equals(cookie.getName())) 
                return cookie;
            
        
        return null;
    

Cookie的修改

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        //和要修改的Cookie具有相同的key
        Cookie cookie = new Cookie("key1", "newValue1");
        //直接添加,有则覆盖,无责创建
        resp.addCookie(cookie);
    

Cookie的删除

protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        //首先找到要删除的Cookie
        Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
        //将其时间设置为0
        if (cookie != null) 
            cookie.setMaxAge(0);
        
        //然后再将这个Cookie加入进去
        resp.addCookie(cookie);
    

Cookie生命控制

通过cookie.setMaxAge()方法可以设置Cookie的存活时间。

cookie.setMaxAge(0);//时间为0表示立即删除
cookie.setMaxAge(1234);//时间为整数表示存活的秒数,还能存活1234秒
cookie.setMaxAge(-1);//时间为负数表示关闭浏览器自动删除(默认值为-1)

Cookie有效路径

通过cookie.setPath();方法可以设置cookie发送到服务器的路径,通过此方法可以过滤哪些Cookie可以发送给服务器。

cookie.setPath(req.getContextPath());

Cookie的实际应用

平时登录网站时,登录成功之后,我们关闭浏览器再次登录时,用户名会自动记录在登录框。某些网站再次打开时不用输入用户名和密码就已经登录成功。

免用户名登陆简单样例

登录表单

<form action="http://localhost:8080/13_cookie_session/loginServlet" method="post">
    用户名:<input type="text" name="username" value="$cookie.username.value"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>

Servlet程序验证登录

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        if (username.equals("qwe111") && password.equals("111")) 
            Cookie usernameCookie = new Cookie("username", username);
            Cookie passwordCookie = new Cookie("password", password);
            usernameCookie.setMaxAge(60 * 60 * 24 * 7);//设置用户名保存时间为7天
            resp.addCookie(usernameCookie);
            resp.addCookie(passwordCookie);
            System.out.println("登陆成功");
         else 
            System.out.println("登陆失败");
        
    

再次打开网页时,用户名将会被记录在登录框中。

 

以上是关于javaWeb基础之Cookie的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb基础—会话管理之Cookie

JavaWeb之Cookie&Session

JavaWeb基础—会话管理之Session

JavaWeb之Cookie

JavaWeb servlet 使用Cookie记录用户访问次数

javaWeb 使用cookie显示商品浏览记录