Cookie和Session的使用及其案例分析
会话
会话技术可以理解为:用户开启一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭会话浏览器,整个过程称为会话。
注意点:每个用户和服务器进行交流的时候各自有一些数据,程序员要想办法保存每个用户的数据
Cookie技术
Cookie是客户端技术,程序把每个用户的数据以Cookie的形式写给各自的服务器,当用户使用这些浏览器去访问服务器端的web资源的时候,就是带着各自的数据去的,这样,web资源处理的数据就是各自的数据了
举例:
判断用户是不是第一次访问
如果是第一次访问,需要输出欢迎,并且记录当前的时间,保存到cookie中,再写入到浏览器端
如果不是第一次访问,获取cookie中的时间,输出时间,并且记录当前的时间,保持在cookie中,再回写到浏览器端
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 1.获取所有的cookie,判断是不是第一次访问
* 2.如果是第一次访问,输出欢迎,记录当前的时间,回写到浏览器端
* 3.如果不是第一次访问,获取时间,输出到浏览器上,记录当前的时间,回写到浏览器上
*/
//设置中文乱码问题的处理
response.setContentType("text/html;charset=utf-8");
//获取所有的cookie
Cookie[] cookies = request.getCookies();
//通过指定的cookie名称来查找cookie
Cookie cookie = MyCookieUtil.getCookieByName(cookies,"last");
//如果cookie==null,说明第一次访问
if (cookie == null) {
//输出欢迎,记录当前的时间,回写到浏览器上
response.getWriter().write("<h1>亲,欢迎下次光临哟</h>");
} else {
//获取cookie的值,输出浏览器,记录当前的时间,回写到浏览器
String value = cookie.getValue();
response.getWriter().write("<h1>亲,您又来了,您上次访问的时间是"+value+"</h1>");
}
//记录当前的时间,回写到浏览器
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sDate = sdf.format(date);
//回写到浏览器
//回写cookie
Cookie c = new Cookie("last",sDate);
//设置有效时间,即可以设置访问的时间,可以在下次访问的时候保存其账号和密码信息
c.setMaxAge(60 * 60);
//设置有效路径 默认的路径就是和servlet的路径相同的.但是你可以通过对数据的改变来完成目的
c.setPath("/day_11");
//回写
response.addCookie(c);
}
实现结果为
cookie细节
1.一个cookie只能标识一种信息,它至少含有一个标识该信息的名称和设置值
2.一个web站点可以给多个web浏览器发送多个Cookie,一个浏览器也可以存储多个web站点提供的Cookie
3.如果创建了一个cookie,并将他发送到浏览器上,默认她是一个会话级别的cookie(存储在浏览器的内存中),用户推出浏览器即被删除
Cookie的使用
编写商品信息列表,给每一个商品起唯一的id值,通过id传值
判断是不是第一次访问
如果不是第一次访问,获取cookie中的商品信息,但是需要判断cookie是否可以包含该商品,如果包含就不用处理,如果不包含,就取出来做累加操作
重定向到商品页面,把商品循环到列表页面
业务流程图如下所示:
代码体现
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID