通俗易懂识Cookie

4 篇文章 0 订阅
3 篇文章 0 订阅

1.什么是Cookie?

(1)先来看官方解释:Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

(2)通俗解释:Cookie就像学校里的校园卡,怎么最快证明你是学校的人呢?认人脸?似乎不太可行。但是,如果学校说:“我现在给新生每人发一张专属学生卡,以后你们来学校,记得带校卡,方便认咱自个的学生,保安才不会拦你,不然,后果自负!”(想到以前上学的时候忘带校卡不给进门的悲惨岁月...)

这时,我们把人当做客户端,把学校当做服务端。

因此类比过来,只要当用户第一次访问网站的时候,对应网站会发一块“Cookie”,方便进行识别。等到用户下一次再来到相同网站时,对应网站会识别出曾经发过的“Cookie”(具体怎么识别,本小节暂不细谈),免去了用户第一次的信息注册(账号、密码等)。又因为不同网站会发放不同的Cookie,因此用户端需要一个文件对Cookie进行收纳,存在自己本地。

2.生活中Cookie的应用

其实把上面Cookie理解了,你或许很快就能想到相关的经历。就拿咱这CSDN来说,在同一天电脑同一个浏览器,第一次访问,我们需要登录或注册自己的个人信息,之后关闭。待到第二次使用时,你会发现噌的一下,直接就进入带有自个登录信息的CSDN页面了。很明显,对于用户体验上是不错的。

3.神奇Cookie在哪里?

以CSDN为例(我这里用的浏览器是Edge),点击右键-检查-应用程序(或叫Application),就可以看到在存储一栏有个Cookie,里面有两块小饼干,那就是CSDN用于识别用户的Cookie。我把Cookie清除后,刷新页面,CSDN会变成这样:

可以看到,这时需要我们的进行登录了。

4.简单代码感受Cookie (Servlet方式)

package com.zhan;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

//保存用户上一次访问的时间
public class CookieDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=utf-8");


        PrintWriter out = resp.getWriter();

        //Cookie,服务器端从客户端获取
        Cookie[] cookies = req.getCookies();

        //判断cookie是否存在
        if(cookies!=null){
            //如果存在cookie

            out.write("你上一次访问的时间是:");

            for (int i = 0; i <cookies.length ; i++) {
                Cookie cookie = cookies[i];
                //获取cookie的名字
                if(cookie.getName().equals("lastLoginTime")){
                        //获取cookie中的值
                    cookie.getValue();
                    long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    out.write(date.toLocaleString());

                }
            }


        }else{
            out.write("这是您第一次访问本网站");
        }

        //服务器给客户端响应一个Cookie
        Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");

        resp.addCookie(cookie);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

运行结果:

 这是第一次访问:可以看到,并没有显示时间,是因为我还没有该网站发放的Cookie;

而当我再次刷新时:

可以看到,已经可以显示出上次访问的具体时间了,说明网站成功根据Cooike识别并记录了我们的访问。 

5.谈谈Cookie的争议

        尽管Cookie常常能简化用户的因特网活动,但是它的使用仍然有很大的争议,因为它们被看作是对用户隐私的一种侵害。它能根据cookie跟踪用户访问网站的时间,顺序,页面内容,这些倘若被不法的Web站点利用并贩卖,会产生极大的危害。所以我们会强调,访问网站一定先注意网站是否安全,而其中一方面的安全指的就是关于Cookie的问题

 

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛变涡流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值