Cookie的概念
Cookie就是客户端会话技术,主要目的是将少量的数据保存到客户端(浏览器)中
Cookie在客户端与服务器端之间的执行过程
Cookie的实现原理
根据执行过程,我们其实发现其实现原理就是响应头set-cookie和请求头cookie的完成
Cookie建立的三大步骤
- 创建cookie: Cookie cookie = new Cookie(name,value);
- 响应cookie:response.addCookie(cookie)
- 获取cookie:Cookie[] cookies = request.getCookies(cookie);
Cookie入门案例
设置Cookie
@WebServlet("/CookieSet")
public class CookieSet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建cookie
Cookie cookie1 = new Cookie("username", "zhangsan");
Cookie cookie2 = new Cookie("password", "123");
//响应cookie
response.addCookie(cookie1);
response.addCookie(cookie2);
}
}
得到cookie
@WebServlet("/CookieGet")
public class CookieGet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html ; charset=utf-8");
//得到Cookie
Cookie[] cookies = request.getCookies();
//遍历cookies
if(cookies!=null){
for (Cookie cookie : cookies){
System.out.println(cookie.getName()+cookie.getValue());
response.getWriter().write("cookie的name值是:"+cookie.getName()+"</br>cookie的value是"+cookie.getValue());
response.getWriter().write("</br>");
}
}else{
response.getWriter().write("未获取到cookie");
}
}
}
运行结果
Cookie细节处理
1、Cookie在浏览器中的保存时间
Cookie默认保存方式是浏览器关闭,则Cookie自动销毁,想要长久保存可以用Cookie.setMaxAge(int seconds); 参数三种分别是负数,0,正数
- 正数:当是正数的时候,你设置多久保存多久(前提是容量够),参数单位是秒
- 0:当时零的时候,浏览器访问完服务器就会自动删除
- 负数:当是负数的时候,也i就是Cookie的默认值,浏览器关闭则删除
2、Cookie存储中文的问题
- 在tomcat8之前是不支持中文存储的,但是可以将其转码存储,一般是URL转码
- tomcat8之后是支持中文存储的,但是不支持特殊字符的存储,存储之前可以用URL转码,使用时候再进行解码
转码:URLEncoder.encode(value,“utf-8”);
解码:URLDecoder.decode(value,“utf-8”);
3、Cookie共享问题
- 同一个服务器下不同的web项目默认情况下Cookie是不共享的,但是可以设置setPath(String path); 将所有的虚拟目录设置为“/”,即path是用“/”表示
- 不同服务器下的多个项目共享,可以通过setDomain(String path)即将它们的一级域名设置相同,例如
setDomain(".baidu.com")
那么tieba.baidu.com和news.baidu.com中的Cookie可以实现共享
Cookie的主要特点以及作用
- Cookie只能存储小量的数据,对于单个Cookie最多是4KB,对于同一域名下的Cookie数量限制是20个
- 作用:在不登陆的情况下,服务端对客户端身份识别,例如,听音乐不登陆,但是它也会根据你平时听歌习惯,向你推荐歌曲,