1、什么是Cookie?
Cookie是一种会话技术,可以将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好的进行数据交互。(会话:客户端和服务器之间请求和响应的过程)
2、Cookie对象
类似于会员卡,卡内存储了用户的信息,如姓名,手机号等,客户第一次光临该商场的时候由商场给客户办理会员卡,之后每一次当该客户来到该商场也将根据会员卡上的信息计算优惠和累加积分。
Cookie也类似这种,当浏览器第一次访问服务器的时候,服务器会给客户端发送一些信息,例如用户信息和商品信息,这些信息都保存在Cookie中,,当浏览器再次访问服务器时,会在请求头中将Cookie发送给服务器,以便服务器对浏览器做出正确的响应。
Cookie在浏览器和服务器之间的传输过程图解
服务器在向客户端发送Cookie时会在HTTP响应头中增加set-Cookie的响应头字段。set-cookie响应头字段中设置Cookie的具体示例如下:
Set-Cookie:username:itcast;Path=/;
user表示Cookie名,Path表示Cookie的属性,Cookie以键值对的形式存在,Cookie属性可以有多个,属性之间用分号“;”和空格分隔
用户第一次访问服务器的时候,服务器会在响应消息中增加Set-Cookie字段,将用户的信息以Cookie的形式发送给浏览器。浏览器一旦接收服务器发送的Cookie信息就会将它保存在自身的缓冲区中。当浏览器后续继续访问服务器时,都会在请求信息中将用户信息以Cookie的形式发送给服务器,从而使服务器分辨出是哪一个用户发送的请求。
Cookie的特点
一个Cookie只能标识一种信息,以name:value的形式存储
一个Web站点可以给一个Web浏览器发送多个cookie,一个web浏览器也可以存储多个web站点提供的cookie
每个cookie的大小限制的4kb,浏览器一般允许存储300个cookie,每个站点大概就是20个cookie信息可以手动的清理
如果想在cookie中存储中文,必须使用URLEncoder类的encode()进行中文转码
同理获取cookie中到的中文信息时,使用URLDecoderl类的decode()进行解码
cookie.setMaxAge(0);删除cookie
Cookie的构造方法
public Cookie(java.lang.String name,java.lang.String value);
参数name用于指定Cookie的名称,value用于指定Cookie的值。需要注意的是,Cookie一旦创建,它的名称就不能再更改,Cookie的值可以为任何值,创建后允许被修改。
String getName();用于返回Cookie的名称
void setValue(String newValue);用于为Cookie设置一个新值
String getValue()用于返回Cookie的值
void setMaxAge(int expiry)用于设置Cookie在浏览器客户机上保持有效的秒数
package com.hnkj.Cookie;
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 java.io.DataInput;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
public class Servlet01_CookieDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
//获取所有cookie
Cookie[] cookies=request.getCookies();
//如果用户是第一次访问,得到的cookie是null
if(cookies!=null) {
//读取cookie中的内容.
out.write("你上次访问的时间是:");
for(int i=0;i<cookies.length;i++) {
Cookie c=cookies[i];
if(c.getName().equals("lastTime")) {
Long lastTime=Long.parseLong(c.getValue());
Date date=new Date(lastTime);
out.write(date.toLocaleString());
}
}
}else {
out.write("这是你第一次访问本站");
}
//创建cookie,存储用户的访问时间
Cookie cookie=new Cookie("lastTime",System.currentTimeMillis()+"");
//设置cookie的有效期
cookie.setMaxAge(24*60*60);
//将cookie添加到response对象中
response.addCookie(cookie);
// response.setContentType("text/html;charset=UTF-8");
// PrintWriter out = response.getWriter();
// //获取所有的Cookie
// Cookie[] cookies = request.getCookies();
// //如果用户是第一测访问,得到的cookie是null
// if(cookies!=null){
// //读取cookie中的内容
// out.write("你上次访问的时间是:");
// for (int i = 0; i <cookies.length ; i++) {
// Cookie c=cookies[i];
// if("lastTIme".equals(c.getName())){
// Long CookieValue = Long.parseLong(c.getValue());
// Date date=new Date(CookieValue);
// out.write(date.toLocaleString());
// }
// }
//
// }else{
// out.println("这是你的第一次访问本站");
// //创建cookies对象,存储用户访问时间
// Cookie cookie=new Cookie("lastTime",System.currentTimeMillis()+"");
// //设置cookie的有效期
// cookie.setMaxAge(24*60*60);
// //将cookie添加到response对象中
// response.addCookie(cookie);
//
// }
}
}