何为Cookie #
cookie是浏览器提供的一种技术,通过服务端将一些文本内容发送到客户端,并保存到客户端本地计算机上,比如登录网站的用户名和密码,保存在浏览器中,cookie的所有信息在浏览器都能看到。
有一个专门操作的cookie的类javax.servlet.http.Cookie;
格式:键值对,使用 = 连接
Cookie的创建和发送 #
通过new cookie(Key,Value)创建cookie对象,要将cookie随相应发送到客户端,需要先添加到HttpSerrvletResponse对象中,response.addCookie(cookie)添加Cookie,这样浏览器就可以看见Cookie了。
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/ServletCookie01")
public class ServletCookie01 extends HttpServlet {
Map<String, Integer> map = new HashMap<>();
public void service (HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8");
Cookie NameCookie = new Cookie("Name","Xenolies"); //创建新的Cookie
Cookie PassWordCookie = new Cookie("Password","123132");
response.addCookie(NameCookie); //将Cookie添加到响应中
response.addCookie(PassWordCookie);
}
}结果:

Cookie的到期时间 #
到期时间用来指定cookie何时失效,cookie.setMaxAge(value),设置有效时间,默认value=-1,即关闭浏览器后就失效,如果value是一个正整数,表示该cookie会在本地浏览器中存活value秒,就算关闭浏览器,重启时,cookie也会存活。如果value=0,表示删除该cookie,即该cookie被作废,HttpServletResponse对象中只有addCookie()方法,没有removeCookie()方法,如果浏览器保存了一个cookie,想让该cookie作废,可以通过setMaxAge(0)方法来删除这个cooike.
Cookie NameCookie = new Cookie("Name","Xenolies");
NameCookie.setMaxAge(60);Cookie的路径问题 #
cookie通过setPath()方法,设置cookie的路径,这个路径直接决定服务器的请求是否会从浏览器中加载某些cookie.
- 当前服务器下的任何项目的任何资源都能获取cookie对象: setPath("/");
Cookie NameCookie = new Cookie("Name","Xenolies"); //创建新的Cookie
NameCookie.setPath("/");- 仅访问当前项目下资源时,可获取cookie对象: setPath("/当前项目名称") (默认设置)
Cookie NameCookie = new Cookie("Name","Xenolies"); //创建新的Cookie
NameCookie.setPath("/ServletCookie01");Cookie的注意点 #
-
cookie是保存在当前客户端浏览器中,不能跨浏览器。
-
cookie不能存中文,如果确实有必要存中文,通过URLEncoder.encode()方法编码,获取时通过URLDecoder.decode()方法进行解码。
-
同名cookie问题:如果服务器端发送重名的cookie,会覆盖掉原有的cookie.
-
浏览器存放cookie的数量:浏览器存储cookie的数量是有上限的,不同浏览器不一样,而且存储大小上也有现在,基本是4KB,由服务端通过new Cookie()和addCookie()方法创建和添加。给后期session来实现回话跟踪。