-
Cookie可以保留会话状态,但是这个状态保存在客户端上
只要Cookie清除,或者Cookie失效,这个会话状态就没有了
Cookie是保存在浏览器客户端上的,
但是也可以保存在浏览器的缓存中,浏览器关闭Cookie消失
Cookie也可以保存在客户端的硬盘中,浏览器关闭Cookie还在,除非Cookie失效 -
Cookie不止在Javaweb中,只要是web开发,只要是B/S架构,只要基于HTTP协议就有Cookie的存在,Cookie这种机制是http协议规定的。
-
在Java中Cookie被当做类来处理,使用new运算符可以创建Cookie对象,二而且Cookie有两部分组成name和value,并且name和value都是字符串。
-
默认情况下,服务器发送Cookie给浏览器之后,浏览器将Cookie保存在缓存当中,只要不关闭浏览器,Cookie永远存在,并且有效。
当浏览器关闭以后,缓存中的Cookie被清除。 -
请求路径和Cookie是紧密相连的,不同的请求路径会发送不同的Cookie,默认情况下,Cookie是和
http://localhost:8080/30/
绑定在一起的 -
如果执行了
cookie.setPath("/30/king")
那么cookie将会和这个路径绑定在一起,只有执行这个路径才会将cookie发送给浏览器 -
默认情况下,没有设置Cookie的有效时长,该Cookie被默认保存在浏览器的缓存当中,只要不关闭浏览器,Cookie就存在,只要关闭浏览器,Cookie就消失,我们可以通过设置Cookie的时长,以保证Cookie保存在硬盘文件中,但是这个时长必须是大于0的,只要这个时长大于0,Cookie就会保存在客户端硬盘文件 中。
Cookie时长=0;直接被删除
Cookie时长<0;不会被存储
Cookie时长>0;存储在硬盘文件中
cookie1.setMaxAge(60*60);
-
浏览器提交Cookie给服务器,服务器怎么接收Cookie?
//从request对象中获取所有Cookie
Cookie[] 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.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/30/CreateAndSendCookieToBrowser">服务器创建Cookie并发送Cookie到浏览器</a>
<a href="/30/SendCookieToServer">浏览器发送Cookie给服务器</a>
</body>
</html>
CreateAndSendCookieToBrowser文件:
package Cookie;
import javax.servlet.ServletException;
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;
@WebServlet("/CreateAndSendCookieToBrowser")
public class CreateAndSendCookieToBrowser extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象
Cookie cookie1 = new Cookie("username","zhangsna");
Cookie cookie2 = new Cookie("password","123");
//设置Cookie的有效时间
cookie1.setMaxAge(60*60);
cookie2.setMaxAge(60*60);
//将Cookie对象发送给浏览器客户端
response.addCookie(cookie1);
response.addCookie(cookie2);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
SendCookieToServer文件:
package Cookie;
import javax.servlet.ServletException;
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;
@WebServlet("/SendCookieToServer")
public class SendCookieToServer extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request对象中获取所有Cookie
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
System.out.println(cookieName+"="+cookieValue);
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}