Cookie
Cookie简介
由于HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出。这样的设计严重阻碍的Web程序的设计。
Cookie实际上就是服务器保存在浏览器上的一段信息,用于区分不同用户。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。
Cookie的用途
- 网上商城的购物车
- 保持用户登录状态
- 163邮箱的7天免登陆
Cookie的原理
浏览器请求,服务器创建一个Cookie对象,该Cookie对象会携带用户信息。服务器将该Cookie发送给浏览器。以后浏览器再次请求时,会携带Cookie对象。服务器会通过该Cookie对象,区分不同用户。
Cookie的缺点
- Cookie最为请求或响应报文发送,无形中增加了网络流量。
- Cookie是明文传送的安全性差。
- 各个浏览器对Cookie有限制,使用上有局限。
设置Cookie
- 创建一个CookieServlet
- 在Servlet的doPost()方法中编写如下代码:
//创建一个Cookie对象
Cookie cookie = new Cookie("username", "zhangsan");
//将Cookie对象放入response对象中
response.addCookie(cookie);
- 在浏览器中访问该Servlet,会发现响应头中出现如下内容:
Set-Cookie: username=zhangsan
如此就成功的向浏览器设置了一个Cookie,当我们在刷新页面时会发现浏览器的请求头中出现如下代码:
Cookie: username=zhangsan
同样我们还可以同时设置多个Cookie:
//创建一个Cookie对象
Cookie cookie1 = new Cookie("username", "zhangsan");
Cookie cookie2 = new Cookie("password", "123456");
Cookie cookie3 = new Cookie("age", "20");
//将Cookie对象放入response对象中
response.addCookie(cookie1);
response.addCookie(cookie2);
response.addCookie(cookie3);
浏览器会以一下形式发送Cookie:
Cookie: username=zhangsan; password=123456; age=20
总之,设置Cookie就是两个步骤:
-
创建Cookie对象
-
将Cookie对象加入到response中
读取Cookie
读取Cookie主要指从读取浏览器中携带的Cookie
只需要通过一个方法就可以得到浏览器中的Cookie,在Servlet或JSP中通过request对象调用getCookies()方法可以获得浏览器传送过来的所有Cookie对象,返回的是一个Cookie数组,通过遍历Cookie数组可以获得所有的Cookie信息。
//通过request的getCookies()方法获的Cookie数组
Cookie[] cookies = request.getCookies();
//判断数组是否为空
if(cookies != null){
//如果不为空遍历数组
for(Cookie cookie : cookies){
//获取cookie的名字
String name = cookie.getName();
//获取cookie的键
String value = cookie.getValue();
System.out.println(name+"---"+value);
}
}
Cookie有效时间
经过上边的介绍我们已经知道Cookie是存储在浏览器中的,但是可想而知一般情况下浏览器不可能永远保存一个Cookie,一来是占用硬盘空间,再来一个Cookie可能只在某一时刻有用没必要长久保存。所以我们还需要为Cookie设置一个有效时间。
通过Cookie对象的setMaxAge()可以设置Cookie的有效时间。
其中setMaxAge()接收一个int型的参数,来设置有效时间。参数主要有一下四种情况:
①设置为0,setMaxAge(0):Cookie立即失效,下次浏览器发送请求将不会在携带该Cookie
②设置大于0,setMaxAge(60):表示有效的秒数60就代表60秒即1分钟,也就是Cookie在1分钟后失效。
③设置小于0,setMaxAge(-1):设置为负数表示当前会话有效。也就是关闭浏览器后Cookie失效
④不设置:如果不设置失效时间,则默认当前会话有效。