原视频地址:https://www.bilibili.com/video/BV1vb41187jH?p=49
Cookie是什么?Cookie作用?Cookie保存在哪里?
Cookie只有在javaweb中有吗?
- Cookie不止是在javaweb中存在
- 只要是web开发,只要是B/S架构,只要是基于HTTP协议,就有Cookie的存在
- Cookie这种机制是HTTP协议规定的
Cookie实现的功能,常见的有哪些?
- 保留购物车商品的状态在客户端上
- 10天内免登录
- ……
在java中Cookie被当做类来处理,使用new运算符可以创建Cookie对象,而且Cookie由两部分组成,分别是Cookie的name和value,name和value都是字符串类型String
在java程序中怎么创建Cookie
Cookie cookie = new Cookie(String cookieName, String cookieValue)
服务器可以一次向浏览器发送多个Cookie
默认情况下,服务器发送Cookie给浏览器之后,浏览器将Cookie保存在缓存中,只要不关闭浏览器,Cookie永远存在,并且有效;当浏览器关闭之后,缓存中的cookie被清除。
在浏览器客户端无论是硬盘文件中还是缓存中保存的Cookie,什么时候会再次发送给服务器呐?
- 浏览器会不会提交发送这些Cookie给服务器,和请求路径有关系。
- 请求路径和cookie是紧密关联的
- 不同的请求路径会发送提交不同的Cookie
默认情况下Cookie会和哪些路径绑定在一起?
/webappname/test/createAndSendCookieToBrowser
这个浏览器中的Cookie会默认和“test/”这个路径绑定在一起。也就是说,以后只要发送“test/”请求,Cookie一定会提交给服务器
/webappname/a
这个浏览器中的Cookie会默认和“webappname/”这个路径绑定在一起。也就是说,以后只要发送“webappname/”请求,Cookie一定会提交给服务器
观察得到:Cookie和请求路径的上一级路径相关联
其实Cookie绑定的路径是可以指定的,可以通过java程序进行设置,保证Cookie和某个特定的路径绑定在一起。
假设,执行了这样的程序:
cookie.setPath("/webappname/king");
那么:Cookie将和/webappname/king
路径绑定在一起。只有发送/webappname/king
请求路径,浏览器才会提交Cookie给服务器。默认情况下,没有设置Cookie的有效时长,该Cookie被默认保存在浏览器的缓存当中,只要浏览器不关闭,cookie存在,关闭浏览器后,cookie消失。我们可以通过设置Cookie的有效时长,以保证Cookie保存在硬盘文件当中,但是这个有效时长必须是大于0的。换句话说,只要设置Cookie的有效时长>0,则该Cookie会被保存在客户端硬盘文件当中。有效时长过去之后,则硬盘文件当中的Cookie失效。
cookie有效时长=0,直接被删除
cookie有效时长<0,不会被持久化存储
cookie有效时长>0,存储在硬盘上
cookie1.setMaxAge(60*60);
一小时有效
浏览器提交Cookie给服务器,服务器接收cookie的方法
1
2
3
4
5
6
7
8
9Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
System.out.println(cookieName + "=" + cookieValue);
}
}浏览器是可以禁用cookie,什么意思
- 表示服务器发送过来的Cookie,浏览器不接受
- 服务器还是会发送Cookie,只不过是不再接收
1 | <!--cookie.html--> |
1 | <!--web.xml--> |
1 | // CreateAndSendCookieToBrowserServlet.java |
1 | // ReceiveCookiesServlet.java |