客户端会话技术Cookie
概念
将数据保存到客户端
快速入门
1.创建Cookie对象,绑定数据
new Cookie(String name,String value)
2.发送Cookie对象
response.addCookie(Cookie cookie)
3.获取Cookie,拿到数据
Cookie[] request.getCookies()
原理
cookieDemo1类
@WebServlet("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie c=new Cookie("name","zhangsan");
response.addCookie(c);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
cookieDemo2类
@WebServlet("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
if (cookies!=null){
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name+"="+value);
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
基于响应头set-cookie和请求头cookie实现
补充
1.一次可以发送多条cookie
Cookie c1=new Cookie("name","zhangsan");
Cookie c2=new Cookie("age","58");
response.addCookie(c1);
response.addCookie(c2);
在请求头cookie以,隔开
2.cookie在默认情况下,浏览器关闭后数据被销毁
若是想要持久存储
setMaxAge(int seconds)
seconds为正数:将cookie数据写到硬盘的文件中,持久化存储。大小代表存活时间
seconds为负数:默认值
seconds为零:删除cookie信息
3.tomcat8之后支持存储中文数据,不支持特殊字符(例如空格)
若要进行特殊字符的存储,则需要编解码URL码
String URLEncoder.encode(String str,编码集)//编码
String URLDecoder.decode(String str,编码集)//解码
4.cookie获取范围
*1.在一个tomcat服务器中,部署了多个web项目,默认情况下cookie不能共享
可以通过设置cookie的获取范围,来共享
setPath(String path)//默认情况下,是当前的虚拟目录,需要共享,可将path设置为“/”
*2.不同的tomcat服务器间cookie共享
设置域名,如果设置一级域名相同,那么多个服务器之间cookie可以共享
setDomain(String path);
特点
1.cookie存储在客户端浏览器,防卫级别较低,数据容易丢失篡改
2.浏览器对于单个cookie的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
作用
1.一般用于存储少量的不太敏感的数据
2.在不登录的情况下,完成服务器对客户端的身份识别