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即可查看
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通过注解和反射 实现模拟 Hibernate Validator验证框架对实体对象的字段验证功能
-
Perl 文本文件的读写操作、文件的重命名和删除、多个文本文件的合并实现代码
-
荐 JAVA实现对已有数据库的插入、删除、更改、查询操作详细解释
-
java实现文件上传,下载和删除的demo
-
Java通过注解和反射 实现模拟 Hibernate Validator验证框架对实体对象的字段验证功能
-
Java:使用DOM4j来实现读写XML文件中的属性和元素
-
JAVA通过Session和Cookie实现网站自动登录的技术
-
js实现对table的增加行和删除行的操作方法
-
Java-IO[实现对目录的遍历以及删除(包含子目录)]
-
js实现对table的增加行和删除行的操作方法