分享

JavaWeb|浅谈Cookie

 算法与编程之美 2020-08-08

问题描述

1 什么是Cookie

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息就相当于我们在银行办理的银行卡,以后再去银行的时候,银行就直接能够通过银行卡辨别我们的身份。

解决方案

2 Cookie的设置与获取

我们可以通过以下方式设置Cookie:

//通过HttpServletResponse.addCookie的方式设置Cookie:注意new Cookie()时两个参数都是字符串

int number = 12;

//如何在cookie空间定义一个变量

Cookie cookie = new Cookie("number",String.valueOf(number));

cookie.setMaxAge(60);

response.addCookie(cookie);

在浏览器中可以查看到我们设置了number=12、Max-Age=60,还可以看见设置的时间:

在这里我们设置了MaxAge,这是Cookie的有效期,单位为秒。Cookie中通过getMaxAge()和setMaxAge(int maxAge)来读写该属性。maxAge有3种值,分别为正数,负数和0。

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。maxAge属性为负数,则表示该Cookie只是一个临时Cookie,不会被持久化,仅在本浏览器窗口或者本窗口打开的子窗口中有效,关闭浏览器后该Cookie立即失效。maxAge为0时,表示立即删除Cookie

我们再通过以下方式获取Cookie:

//服务端获取客户端携带的cookie:通过HttpServletRequest获取

int number = 0;

Cookie[] cookies = request.getCookies();

for (Cookie cookie : cookies){

    if (cookie.getName().equals("number")){

        number = Integer.valueOf(cookie.getValue());

        break;

    }

}

结语

我们设置cookie用response,获取cookie用request,还有需要注意的是cookie是不能跨浏览器的。如果服务器端向客户端发送重复的Cookie那么客户端原有的Cookie会被覆盖,例如客户端第一次请求服务器端,服务器端发送的Cookie是Set-Cookie:a=A,第二次请求发送的Cookie是Set-Cookie:a=AA,那么客户端只会留下后发送的Cookie,即a=AA。这也是一个修改Cookie的方法。还需要将MaxAge设置为0。新建的Cookie。除了value、maxAge之外的属性,比如name、path、domain都必须与原来的一致才能达到修改或者删除的效果。否则,浏览器将视为两个不同的Cookie不予覆盖。

END

实习编辑   |   王文星

责       编   |   刘玉江

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多