欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现对浏览器cookie的读写和删除.

程序员文章站 2022-05-05 11:37:27
...
Tips:本文末尾分享了一个可以立即使用的cookie工具类代码,如果想直接使用,可以拖到文件最后复制使用.

如果对基本概念实在没有兴趣,可以先使用,使用的时候发现不明白的地方,再回头来看一些概念.

不过还是推荐先熟悉概念再上手使用.

基本概念

什么是cookie?

概念

cookie在web开发中可不是引用它的原意"曲奇"的意思哦~
在web开发中 cookie的含义是储存在用户本地终端上的数据 类型为小型文本型文件,用Java来说就相当于只支持String类型.

属性

name:cookie的名称,类似于map键值对的key.

value:cookie对应名称的值,类似于map键值对的value.

maxAge:cookie的最大存活时间.

domain:可以访问该cookie的站点

path:定义web站点可以访问该cookie的目录

本文就列举这些本文用到的属性,一些其它的属性想要具体了解可以参照 百度百科

Request与Response

如果对Request和Response还不理解,可以参考我另一篇文章详细理解后再回来看cookie.

cookie的读写与删除

1.写入cookie

写入cookie,我们需要用到response.
具体步骤如下:

(1)声明cookie

Cookie cookie = new Cookie(String name, String value);

(2)设置cookie最大存活时间

cookie.setMaxAge(int maxAge);

(3)设置可以访问该cookie的站点

cookie.setDomain("站点地址,如:http://localhost:8080");

(4)设置站点可以访问该cookie的目录

 cookie.setPath("/");

(5)使用response添加cookie

  response.addCookie(cookie);

(6) 查看cookie

谷歌浏览器为例.
F12打开开发者面板.
点击Application选项,选择Cookie即可查看
Java实现对浏览器cookie的读写和删除.

2.读取cookie

读取cookie需要用到request.

(1)利用request取出所有cookie

 Cookie[] cookies = request.getCookies();

(2) 遍历cookie数组,取出我们需要的cookie.

假定我们现在要取出name为"LwinnerG"的cookie

       for (int i = 0; i < cookies.length; i++) {
                if (cookies[i].getName().equals("LwinnerG")) {
                        retValue = cookies[i].getValue();
                    break;
                }
            }

3.删除cookie

删除cookie其实就是给指定name的cookie写入空值.然后最大存活时间设为0
所以还是利用response.

(1)声明Cookie对象

Cookie cookie = new Cookie("要删除的cookie的name", "");

(2)设置cookie的最大存活时间

  cookie.setMaxAge(0);

(3)加入cookie

  response.addCookie(cookie);

这样就删除成功了.

成品Cookie工具类

温馨提示:本工具类是在本地开发环境下编写的,所以其中的getDomainName()方法也是建立在本地http://localhost:8080格式下的,如果在其它环境中应用,请自行修改

public class CookieUtil{
    /***
     * 获得cookie中的值,默认为主ip:www.gmall.com
     * @param request
     * @param cookieName
     * @param isDecoder
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
        Cookie[] cookies = request.getCookies();
        if (cookies == null || cookieName == null){
            return null;
        }
        String retValue = null;
        try {
            for (int i = 0; i < cookies.length; i++) {
                if (cookies[i].getName().equals(cookieName)) {
                    if (isDecoder) {//如果涉及中文
                        retValue = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
                    } else {
                        retValue = cookies[i].getValue();
                    }
                    break;
                }
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return retValue;
    }
    /***
     * 设置cookie的值
     * @param request
     * @param response
     * @param cookieName
     * @param cookieValue
     * @param cookieMaxage
     * @param isEncode
     */
    public static   void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
        try {
            if (cookieValue == null) {
                cookieValue = "";
            } else if (isEncode) {
                cookieValue = URLEncoder.encode(cookieValue, "utf-8");
            }
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage >= 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request)// 设置域名的cookie
                cookie.setDomain(getDomainName(request));
            // 在域名的根路径下保存
            cookie.setPath("/");
            response.addCookie(cookie);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /***
     * 获得cookie的主域名,本系统为gmall.com,保存时使用
     * @param request
     * @return
     */
    private static final String getDomainName(HttpServletRequest request) {
        String domainName = null;
        String serverName = request.getRequestURL().toString();
        if (serverName == null || serverName.equals("")) {
            domainName = "";
        } else {
            serverName = serverName.toLowerCase();
            serverName = serverName.substring(7);
            final int end = serverName.indexOf("/");
            serverName = serverName.substring(0, end);
            final String[] domains = serverName.split("\\.");
            int len = domains.length;
            if (len > 3) {
                // www.xxx.com.cn
                domainName = domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
            } else if (len <= 3 && len > 1) {
                // xxx.com or xxx.cn
                domainName = domains[len - 2] + "." + domains[len - 1];
            } else {
                domainName = serverName;
            }
        }
        if (domainName != null && domainName.indexOf(":") > 0) {
            String[] ary = domainName.split("\\:");
            domainName = ary[0];
        }
        System.out.println("domainName = " + domainName);
        return domainName;
    }
    /***
     * 将cookie中的内容按照key删除
     * @param request
     * @param response
     * @param cookieName
     */
    public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, String cookieName) {
        setCookie(request, response, cookieName, null, 0, false);
}

}

文章到此就结束啦,感谢每一份阅读.

如果本文含有错误或其它引起您不适的内容还请不吝赐教!谢谢!

相关标签: Java web java