Java Web如何操作Cookie的添加修改和删除
来源:互联网 发布:红楼梦解析知乎 编辑:程序博客网 时间:2024/06/10 14:15
一、Cookie是什么
Cookie是服务器存放在客户端浏览器上的一些小数据,可以使用Cookie完成与服务器的一些交互动作。服务器可以通过HTTP响应头将Cookie发送给浏览器,而浏览器如果支持存储Cookie,则将HTTP响应头信息中的Cookie内容存放到浏览器中。当浏览器请求访问一个网站时,如果这个网站在此浏览器中存放有Cookie内容,浏览器会将Cookie内容附加到HTTP请求头信息中发送给服务器。鉴于此,Cookie存放的内容是不宜过多的,一般浏览器也是这样规定的。
浏览器应该支持每台 Web 服务器有 20 个 cookie,总共有 300 个 cookie,并且可能将每个 cookie 的大小限定为 4 KB。
二、Servlet如何创建Cookie对象
Java Web提供了一个Cookie类:javax.servlet.http.Cookie
创建Cookie对象
Cookie是一个类似于键值对的数据,通过Cookie的构造方法Cookie(String name, String value)创建一个Cookie对象,不过Cookie与键值对数据不同的一点儿是,存储在浏览器中的Cookie对象可以拥有相同的name值,这点儿在后面获取Cookie对象的时候需要特别注意。
修改Cookie值
创建好Cookie对象后,我们可以通过setValue(String newValue)方法修改值,通过getValue()获取值。
添加Cookie描述
为了方便客户端用户查看Cookie信息,可以通过setComment(String purpose)方法设置一个描述信息,Cookie还没有发送前,通过getComment()方法获取描述信息。
设置Cookie有效期和删除Cookie
存放在客户端的Cookie是有有效期的,可以通过setMaxAge(int expiry)方法设置这个Cookie可以保存好长时间,单位为秒,这是一个时间长度,不是一个时间点Timestamp。如果没有设置有效期,则默认为-1(或者说小于0的值),表示在浏览器关闭时就删除Cookie内容,如果有效期设置为0,则表示通知浏览器立即删除这个Cookie。
设置Cookie作用范围和域
我们还可以指定Cookie在哪个网页才有效,通过setPath(String uri)方法即可设置,如果值为“/”表示作用范围为整个网站,默认是这个值。
另外还可以指定这个Cooke对其他网站有效(也就是不同的域),通过setDomain(String pattern)方法来实现,不过需要注意的是,一般浏览器是不允许一个网站设置另外网站的Cookie内容的,所以这个用处不大。实在要做,就需要修改浏览器的配置才行。
Cookie中文问题
Cookie有一点儿不好的就是不支持中文,这点儿一定要注意了,如果忘Cookie中添加了中文内容,则系统会抛出异常内容:
java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
如果确实需要写入中文,则需要进行BASE64转码才行。在读取Cookie的时候又需要进行反转码。
三、如何向客户端写入Cookie
前面说了,Cookie写入浏览器是通过HTTP响应头带入的。在Java Web开发中Response对象已经帮我们完成了这个工作,通过Response的addCookie(Cookie cookie)方法就可以向浏览器写入Cookie内容了。一个响应头可以带入多个Cookie,所以这个方法也可以多次调用,一次写入多个Cookie。
四、获取客户端发送来的Cookie
跟向浏览器写入Cookie相反,客户端通过HTTP请求头将Cookie带入发送给服务器。通过Request.getCookies()方法可以获取到从客户端发送来的Cookie数组。不过从浏览器发送过来的Cookie对象只有name属性和value属性,其他有效期,有效路径等都是没有的。而且可以有多个相同的name属性的,所以判断是不是我们需要的Cookie需要审慎的。
五、实现代码
添加Cookie:
protected
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
// 1.创建Cookie对象
Cookie cookie1 =
new
Cookie(
"webname"
,
"XCoder Studio"
);
// 2.配置Cookie对象
cookie1.setComment(
"Web Host Name"
);
// Cookie描述
cookie1.setMaxAge(
24
*
60
*
60
);
// Cookie有效时间
//cookie1.setPath("/"); // Cookie有效路径
// 3.通过response对象将Cookie写入浏览器,当然需要解决中文乱码问题,否则会抛出异常
// java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
response.setCharacterEncoding(
"UTF-8"
);
response.setContentType(
"text/html;charset=UTF-8"
);
response.addCookie(cookie1);
// 跳转到首页
response.sendRedirect(
"./index.jsp"
);
}
读取Cookie:
protected
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
// 读取Cookie,通过request请求读取Cookie
Cookie[] cookies = request.getCookies();
// 判断是否存在Cookie,不存在跳转到首页
if
(cookies ==
null
) {
response.sendRedirect(
"./index.jsp"
);
return
;
}
// 处理输出中文乱码问题
response.setCharacterEncoding(
"UTF-8"
);
response.setContentType(
"text/html;charset=UTF-8"
);
// 获取输出对象
PrintWriter out = response.getWriter();
// 迭代处理客户端发送来的Cookie对象
out.println(
"---------------------------------------------------------<br />"
);
for
(Cookie cookie:cookies) {
out.println(
"Cookie名 称:"
+cookie.getName()+
"<br />"
);
out.println(
"Cookie储 值:"
+cookie.getValue()+
"<br />"
);
out.println(
"Cookie备 注:"
+cookie.getComment()+
"<br />"
);
out.println(
"Cookie有效时间:"
+cookie.getMaxAge()+
"<br />"
);
out.println(
"Cookie有效路径:"
+cookie.getPath()+
"<br />"
);
out.println(
"Cookie有效域名:"
+cookie.getDomain()+
"<br />"
);
out.println(
"<a href=\"./CookieDel?name="
+cookie.getName()+
"\">删除Cookie</a><br />"
);
out.println(
"---------------------------------------------------------<br />"
);
}
}
删除Cookie:
protected
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
// 获取GET传递参数名称
String delName = request.getParameter(
"name"
);
if
(delName ==
null
) {
response.sendRedirect(
"./CookieRead"
);
return
;
}
// 获取Cookies数组
Cookie[] cookies = request.getCookies();
// 迭代查找并清除Cookie
for
(Cookie cookie: cookies) {
if
(delName.equals(cookie.getName())) {
cookie.setMaxAge(
0
);
response.addCookie(cookie);
}
}
response.setHeader(
"refresh"
,
"3;./CookieRead"
);
PrintWriter out = response.getWriter();
out.println(
"Will go back after 3 seconds..."
);
}
运行会发现读取Cookie时,所以的有效时间都是Null的。
- Java Web如何操作Cookie的添加修改和删除
- 关于Cookie的添加/修改/删除操作体验(C#)
- cookie的操作 添加 获取 删除cookie
- asp.net中Cookie的添加 读取 修改和删除
- JavaScript js cookie的添加、删除、修改和查询
- 如何在DataGrid中进行添加、删除和修改操作
- 如何在DataGrid中进行添加、删除和修改操作
- 如何在DataGrid中进行添加、删除和修改操作
- java和js添加删除读取cookie
- DataGrid的使用入门(添加、删除和修改操作)
- Net cookie 添加/修改/删除
- java添加删除cookie
- java操作Cookie,进行添加、读取、删除操作
- java操作Cookie,进行添加、读取、删除操作
- Response-->cookie的添加和删除
- js对cookie的添加和删除
- Java Cookie操作添加和清除
- javascript json 添加 修改 删除 的操作
- 【网络】OSI七层模型
- 一行js代码破解百度云大文件下载限制
- django 接受post请求json.dumps()的时候会引发TypeError: 'expected string or buffer'错误
- iOS开发之判断字符串是否为指定字符串开头或结尾
- 双11剁手幕后的阿里“黑科技”
- Java Web如何操作Cookie的添加修改和删除
- hadoop HA集群搭建(red hat)
- mysql 的常见语句总结和其他基础知识
- Java对象序列化追加的问题,以及Java的读取多个对象的问题解决方法。
- (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)
- Eclipse 安装 windowBuilder(图形化插件)
- 455. Assign Cookies
- 定位网页元素的8中方法
- redis 简单总结