Servlet API 3.0 --------------------- javax.servlet.http.Cookie 学习笔记

一、什么是Cookie?

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的Cookie规范都已废弃,最新取代的规范是RFC6265

二、Cookie的用途

因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie就行了。

Cookie另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,如果该Cookie尚未到期,浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

三、Cookie的缺陷

  1. Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
  2. 由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非用HTTPS。
  3. Cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的。

四、Cookie的生命周期

Cookie的生命周期可以通过cookie.setMaxAge(int expiry)方法设置,具体规则如下:

  1. expiry > 0:当expiry大于0时(一般设置为1),浏览器不仅会把cookie保存在浏览器内存中,还会把cookie保存到硬盘上,
    例:cookie.setMaxAge(60*60),表示cookie将存活一个小时,无论是否重启浏览器、或是系统。

  2. expiry < 0:当expiry小于0时(一般设置为-1),表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。

  3. expiry = 0:当expiry等于0时,表示cookie即不在内存中存活,也不在硬盘上存活,这样的cookie设置只有一个目的,那就是覆盖客户端原来的这个cookie,使其作废。

五、javax.servlet.http.Cookie API及其他相关操作

1、cookie常用API
方法名描述
String getComment()返回描述此cookie用途的注释,如果cookie没有注释,则返回null。
int getMaxAge()以秒为单位,返回cookie的有效期。默认情况下为-1,表示cookie将持续存在直到浏览器关闭。
void setMaxAge(int expiry)以秒为单位,设置cookie的有效期
String getName()返回cookie的名称。
void setValue(String newValue)设置cookie的值
String getValue()返回cookie的值。
2、服务器端对cookie的操作
  1. 获取客户端发送的cookie
    httpServletRequest.getCookies();

  2. 创建并向客户端发送cookie
    Cookie cookie = new Cookie(“cookieName”, “cookieValue”);
    httpServletResponse.addCookie(cookie);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值