作者:java_wxid
Cookie技术
a)什么是Cookie?
1.Cookie翻译过来是饼干的意思。
2.Cookie是由服务器通知客户端,并由客户端保存键值对的一种技术。
它的构造器是:public Cookie(String name, String value) {}
3.只要客户端有Cookie,每次请求都会发送给服务器。
4.每个Cookie不能超过4kb的大小
b)如何创建Cookie
1、创建一个Cookie对象
2、调用response.addCookie( cookie );
protected void createCookie(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 1、创建一个Cookie对象
Cookie cookie = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
// 2、调用response.addCookie( cookie );
response.addCookie(cookie);
response.addCookie(cookie2);
response.getWriter().write("创建了Cookie");
}
c)服务器如何获取Cookie
只需要调用reqeust.getCookies():Cookie[]
图解如何获取Cookie。
protected void getCookie(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 获取客户端发送过来的全部的Cookie对象
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
response.getWriter().write("收到客户端的Cookie:" + cookie.getName() + "====" + cookie.getValue() + "<br/>");
}
}
}
工具类
public class CookieUtils {
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;
}
}
d)Cookie值的修改
第一套方案是:
1、你要new一个同名的Cookie对象。
2、在构造器中传入你要修改的新值。
3、调用response.addCookie()
// 1、你要new一个同名的Cookie对象。
// 2、在构造器中传入你要修改的新值。
Cookie cookie = new Cookie("key2", "newValue2");
// 3、调用response.addCookie()
response.addCookie(cookie);
第二套方案是:
1、你需要先查找到你要修改的Cookie对象
2、然后调用setValue方法设置新的值
3、最后调用response.addCookie();
// 1、你需要先查找到你要修改的Cookie对象
Cookie cookie = CookieUtils.findCookie("key1", request.getCookies());
if (cookie != null) {
// 2、然后调用setValue方法设置新的值
cookie.setValue("newValue1");
// 3、最后调用response.addCookie();
response.addCookie(cookie);
}
在谷歌浏览器中如何查看Cookie信息
在火狐 浏览器中如何查看 Cookie信息
e)Cookie生命控制
setMaxAge() 决定Cookie存活多久。
正数 在指定的秒数后过期。
零 表示马上删除Cookie
负数 表示浏览器关闭的时候,就删除Cookie(默认的情况)
protected void deleteNow(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = CookieUtils.findCookie("key2", request.getCookies());
if (cookie != null) {
cookie.setMaxAge(0);// 立即删除Cookie
response.addCookie(cookie);
}
response.getWriter().write("key2这个Cookie没了");
}
protected void life3600(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("key2", "value3600");
cookie.setMaxAge(60*60);//表示这个Cookie一个小时后被删除
response.addCookie(cookie);
response.getWriter().write("创建一个一小时后才会被删除的Cookie");
}
protected void defaultLife(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 创建出来的Cookie,maxAge默认值是-1,表示浏览器一关,Cookie就没了。
Cookie cookie = new Cookie("key1", "value1");
response.addCookie(cookie);
response.getWriter().write("默认创建出来的Cookie,浏览器一关就没了");
}
f)Cookie有效路径Path的设置
Cookie中有一个path属性,它可以有效的过滤哪些Cookie可以不用傻傻地发送给服务器。
当一个Cookie的path值为 /day14 表示请求地址是:http://ip:port/day14/* 那么Cookie就会发送给服务器
CookieA 的path=/day14
CookieB的path=/day14/abc
那么现在请求地址为:http://ip:port/day14/c.html
CookieA会发送给服务器
如果请求的地址为:http://ip:port/day14/abc/c.html
CookieA会发送给服务器
CookieB会发送给服务器
protected void pathTest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("key3", "pathtest");
cookie.setPath(request.getContextPath() + "/abc"); // 得到 /day14/abc
response.addCookie(cookie);
response.getWriter().write("我创建了一个有path的Cookie");
}
g)Cookie练习—免输入登录用户名
表单:
<body>
<form action="userServlet">
<input type="hidden" name="action" value="login"/>
用户名:<input type="text" name="username" value="${ cookie.username.value }"/><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" />
</form>
</body>
服务器Sevlet代码:
protected void login(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("wzg168".equals(username) && "123456".equals(password)) {
// 登录成功
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(60*60*24*7);// 用户名保留 一个星期
response.addCookie(cookie);
System.out.println("下次再来,我记住你啦");
} else {
// 登录失败
System.out.println("登录失败!");
}
}