cookie概念及基本实现使用

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值