本文共 4022 字,大约阅读时间需要 13 分钟。
在日常生活中,从拨通电话到挂断电话之前的一连串的你问我答的过程就是一个会话。Web应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程,例如,一个用户在某网站上的整个购物过程就是一个会话。
在打电话过程中,通话双方会有童话内容,同样,在客户端与服务器端交互的过程中,也会产生一些数据,例如,用户甲和乙分别登录了购物网站,甲购买了一个Nokia手机,乙购买了一个Ipad,当这两个用户结账时,Web服务器需要对用户甲和乙的身份进行保存。虽然HttpServletRequest对象和ServletContext对象可以对数据进行保存,但是这两个对象都不可行,具体原因如下:在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录用户的个人信息(姓名,手机号码等)、消费额度和积分额度等。顾客一旦接收了会话,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。在Web应用中,Cookie的功能类似于这张会员卡。
当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当浏览器再次范文服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。 服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的Cookie遵循一定的语法格式,具体如下:Set-Cookie: user=zhang; Path=/;
user表示Cookie的名称,zhang表示Cookie的值,Path表示Cookie的属性。需要注意的是,Cookie必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号;和空格分割。
Cookie在浏览器和服务器之间的传输过程:
Cookie将用户的信息保存到客户端浏览器的一个技术,当下次访问的时候,浏览器会自动携带Cookie的信息过来到服务器
创建Cookie | new Cookie(name, value), javax.servlet.http.Cookie |
将Cookie发送给浏览器 | HttpServletResponse.addCookie(javax.servlet.http.Cookie) |
接收浏览器携带的所有Cookie | HttpServletRequest.getCookies() |
流程分析:
步骤分析:
代码实现:
package pers.zhang.servlet;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.IOException;import java.util.Date;/** * @author zhang * @date 2019/9/18 - 23:08 */public class VisitServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //获得客户端的所有Cookie Cookie[] cookies = request.getCookies(); //从cookies的数组中查找指定名称的cookie Cookie temp = null; for (int i = 0; i < cookies.length; i++) { if(cookies[i].getName().equals("visitTime")){ temp = cookies[i]; break; } } //判断是不是第一次访问 if(temp == null){ //是第一次访问 response.getWriter().println("欢迎来到本网站!
"); }else{ //不是第一次访问 Long time = Long.parseLong(temp.getValue()); Date date = new Date(time); response.getWriter().println("欢迎来到本网站:您上次访问时间为" + date.toLocaleString() + "
"); } //记录当前时间,写回到Cookie中 Cookie c = new Cookie("visitTime","" + System.currentTimeMillis()); response.addCookie(c); }}
第一次访问,页面显示:
会话级别的Cookie:默认的关闭了浏览器Cookie就销毁了
持久级别的Cookie:需要设置有效时长,关闭浏览器也不会销毁的Cookie
cookie的唯一表示:
转载地址:http://ensqb.baihongyu.com/