cookie----->指某些网站存储在用户本地终端的数据
通俗来说,cookie就是用来识别会话,即记录上一次的动作,其实对于大多数初级入门程序猿来说,cookie、session这种词显得太过专业,单看概念是没有办法看懂的,这样,我来举个例子,使得这两个概念更容易理解
也就是当你登录一些网站的时候,你会发现登陆过一次以后,等你再次去登陆的时候,这个网站会把你的账户和密码记录下来让你可以直接登录;
其实简单来说就是他把你的账户密码等个人数据存下来,等到你下一次再登陆的时候直接检查上一次的登录信息对不对,然后就直接登录了,使客户使用起来更加舒适
那么这一个中间过程就是通过cookie来实现的,当然中间过程和上述过程还是会有些差距,但大致也就是 这个理。
cookie实际上也就是一个字符串,以key-value的形式来存着
*1、分类
会话cookie:
1>没有用setMax来定义cookie的最大生命周期
2>生命周期和浏览器相关
3>保存在内存里面
持久cookie
用了setMax来定义cookie的最大生命周期,最下面我会给出代码来实现这两种cookie
插一个面试题
cookie与变量的区别:
变量是当你关闭网站以后,再次打开就恢复原始数据
cookie就是再次打开存储的数据还在
2、cookie的实现原理:
3、注意事项
1>一个cookie只有一个key-value值
2>一个cookie只能表示一种信息
3>一个Web站点可以给一个浏览器发送多个cookie
4>浏览器一般只允许存放300个Cookie
5>每个站点最多存放20个Cookie
6>每个Cookie的大小限制为4KB
7>Cookie是存放在客户端的,不够安全
4、使用方法
1>先创建cookie
2>调用response.addCookie(cookie)添加cookie
5、读取
1>调用request.getCookie()得到cookie数组
2>遍历数组通过name寻找cookie
6、cookie在idea上的使用举例
@WebServlet(urlPatterns = "/cookieServlet")
public class CookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);//无论用什么方法都可进到post方法
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//cookie
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out=resp.getWriter();
for(int i=0;i<3;i++) {
Cookie cookie = new Cookie("cookieKey-"+i,"cookieValue-"+i);
resp.addCookie(cookie);
cookie=new Cookie("PersistentCookieKey-"+i,"PersistentCookieValue-"+i);
cookie.setMaxAge(36000);
resp.addCookie(cookie);
}
out.append("<html>")
.append("<head><title>CookieServletDemo</title></head>")
.append("<body>")
.append("<a href='showServlet'>Go To Show Cookie</a>")
.append("</body>")
.append("</html>");
}
}
@WebServlet("/showServlet")
public class ShowServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out=resp.getWriter();
//显示cookie
out.append("<html>")
.append("<head><title>CookieServletDemo</title></head>")
.append("<body>")
.append("<table border='1' align='center'>")
.append("<tr>")
.append("<td>CookieName</td>")
.append("<td>CookieValue</td>");
Cookie[] cookies=req.getCookies();
Cookie cookie=null;
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
cookie=cookies[i];
out.append("<tr>")
.append("<td>"+cookie.getName()+"</td>")
.append("<td>"+cookie.getValue()+"</td>")
.append("</tr>");
}
}
out.append("</tr>")
.append("</table>")
.append("</body>")
.append("</html>");
}
}
通过以上动作,我们可以很直观的看见cookie的工作原理,其中使用cookie.setMaxAge()方法来将第二个cookie标记成最大存活时间为3600m秒,也就是存进去的cookie标签将在3600ms后被删除,然后我们来看看验证结果
因为我之前进过这个网站,所以无论我怎样再次刷新,以上的cookieID是不会消失,也就是我的浏览器记住了这些ID,
而当我在此浏览器的设置中关闭cookie以后再次刷新原本的的页面,cookieID全部被更新成空的,也就是浏览器记不住我曾经访问过这个页面
由此可以看出cookie其实就是充当一个标签的作用
以上源代码
https://github.com/Fancccy/CodingHome/tree/master/servlet_cookie/servlet_cookie