Cookie是浏览器缓存中的一部分
什么是Cookie
在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录用户的个人信息(姓名,手机号
等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将
根据会员卡上的消费记录计算会员的优惠额度和累积积分。在Web应用中,Cookie的功能类似于这张会员卡,当用户
通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再
次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。
服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的
Cookie遵循一定的语法格式,具体示例如下:
Set-Cookie: user=hxzyah; path=/;
在上述示例中,user表示Cookie的名称,hxzyah表示Cookie的值,Path表示Cookie的属性。需要注意的是,
Cookie必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号,和空格分隔。
什么是Session
当人们去医院就诊时,就诊病人需要办理医院的就诊卡,该卡上只有卡号,而没有其他信息。
但是病人每次去该医院就诊时,只要出示就诊卡,医务人员便可根据卡号查询到病人的就诊信息。
Session 技术就好比医院发放给病人的就医卡和医院为每个病人保留病例的档案的过程。当浏览器
访问Web服务器时,Servlet容器就会创建一个Session对象和ID属性,其中,Session对象就相当
于病历档案,ID就相当于就诊卡号。当客户端后续访问服务器时,只要将标识号传递给服务器,服务器
就能判断出该请求是哪个客户端发送的,从而选择与之对应的Session对象为其服务。
需要注意的是,由于客户端需要接收、记录和回送Session对象的ID,因此,通常情况下,Session
是借助Cookie技术来传递ID属性的。
有了Cookie为什么还有Session?
Cookie是有大小和个数的限制的Session存到服务器端的技术,没有大小和个数的限制
Cookie相对与Session来讲不安全。
代码实现
package com.CookieServlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
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.servlet.http.HttpSession;
public class BuyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码格式
request.setCharacterEncoding("utf-8");
//接收数据
String shop = request.getParameter("shop");
// //创建一个Cookie对象
// Cookie cookie=new Cookie("shop", shop);
// //响应给客户端浏览器
// response.addCookie(cookie);
// response.sendRedirect("fukuan");
HttpSession session = request.getSession();
session.setAttribute("shop", shop);
System.out.println("sessionId"+session.getId());
response.sendRedirect("fukuan");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.CookieServlet;
import java.io.IOException;
import java.sql.Date;
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.servlet.http.HttpSession;
public class PayServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得客户端浏览器所接收的所有的Cookie的信息
Cookie[] cookies = request.getCookies();
response.setContentType("text/html;charset=utf-8");
//对接收的cookie的信息进行遍历
for(Cookie cookie:cookies){
String name = cookie.getName();
if(name.equals("shop")){
response.getWriter().println("你已经购买成功"+cookie.getValue());
}else {
}
}
HttpSession session = request.getSession();
System.out.println("sessionId:"+session.getId());
String shop = (String)session.getAttribute("shop");
System.out.println("shop:"+shop);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.CookieServlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class VisitServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//先获取当前访问的信息 发送给客户端保存
String name = request.getParameter("name");
//第二次访问 首先获得cookie信息 判断是否是第二次访问
Cookie[] cookies = request.getCookies();
response.setContentType("text/html;charset=utf-8");
if (cookies!=null) {
for(Cookie c:cookies){
String cname = c.getName();
String[] split = cname.split(":");
if(split[0].equals(name)){//不是第一次访问
response.getWriter().println(split[0]+"你上次访问的时间是"+split[1]);
//获取当前访问的时间
Date time=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String timestr = sdf.format(time);
//创建一个Cookie对象将获得的信息响应给浏览器
Cookie cookie=new Cookie("name+time", name+":"+timestr);
response.addCookie(cookie);
}
}
}
//获取当前访问的时间
Date time=new Date();
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
String timestr1 = sdf1.format(time);
//创建一个Cookie对象将获得的信息响应给浏览器
Cookie cookie1=new Cookie("name+time", name+":"+timestr1);
response.addCookie(cookie1);
System.out.println(name+"第一次访问"+timestr1);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}