什么是Cookie
- Cookie是服务器通知客户端保存键值对的一种技术。
- 客户端有了Cookie后,每次请求都发送给服务器
- 每个Cookie大小不能超过4kb
如何创建Cookie
Cookie cookie=new Cookie("key1111","value1111");
response.addCookie(cookie);
服务器如何获取Cookie
一行即可
Cookie[] cookies = request.getCookies();
如何修改cookie
方案一:
- 先创建一个要修改的同名的cookie对象,赋予其新的value值
- 调用response.addCookie(cookie); 通知客户端保存修改
方案二:
- 先查找到要修改的cookie对象
- 调用setValue()方法赋予新的cookie值
- 调用response.addCookie(cookie); 通知客户端保存修改
注意:
cookie值不能包含空格,方括号,圆括号,等号,逗号,双引号,斜杠,问号,@,冒号,分号
cookie的生命控制
管理cookie什么时候被删除
setMaxAge()
正值: 表示指定的秒数后删除
负数: 表示浏览器一关,cookie就会被删除
0: 表示马上删除cookie
cookie有效路径path的设置
- cookie的path属性可以 有效的过滤那些cookie可以发送给服务器,哪些不发。
- 其通过请求地址进行有效过滤
举例:
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送
CookieB 不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送
免用户名登陆
最关键的代码是这行:(在用户名栏中默认填入cookie值)
用户名:<input type="text" name="username" value="${cookie.username.value}">
login.jsp页面如下 :
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/Cookie_session/loginServlet" method="get">
用户名:<input type="text" name="username" value="${cookie.username.value}"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
LoginServlet 如下 :
package com.zzq.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if ("haifan".equals(username) && "123456".equals(password)) {
//登录 成功
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(60 * 60 * 24 * 7);//当前Cookie一周内有效
resp.addCookie(cookie);
System.out.println("登录 成功");
} else {
// 登录 失败
System.out.println("登录 失败");
}
}
}