腾讯分分彩组三杀号 > Web分析 >

Web-第十天 CookieSession学习

2018-07-05 23:10

  在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

  应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程,例如,一个用户在某网站上的整个购物过程就是一个会话。在打电话过程中,通话双方会有通话内容,同样,在客户端与服务器端交互的过程中,也会产生一些数据。例如,用户甲和乙分别登录了购物网站,甲购买了一个

  手机,乙购买了一个Ipad,当这两个用户结账时,Web服务器需要对用户甲和乙的信息分别进行保存。在前面章节讲解的对象中,HttpServletRequest对象和ServletContext对象都可以对数据进行保存,但是这两个对象都不可行,具体原因如下:(

  )客户端请求Web服务器时,针对每次HTTP请求,Web服务器都会创建一个HttpServletRequest对象,该对象只能保存本次请求所传递的数据。由于购买和结账是两个不同的请求,因此,在发送结账请求时,之前购买请求中的数据将会丢失。(

  )使用ServletContext对象保存数据时,由于同一个Web应用共享的是同一个ServletContext对象,因此,当用户在发送结账请求时,由于无法区分哪些商品是哪个用户所购买的,而会将该购物网站中所有用户购买的商品进行结算,这显然也是不可行的。(

  )为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。关于Cookie和Session的相关知识,将在下面的小节进行详细讲解。

  什么是Cookie在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录用户的个人信息

  姓名,手机号等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。在

  Web应用中,Cookie的功能类似于这张会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。服务器向客户端发送

  表示Cookie的名称,javahelp表示Cookie的值,Path表示Cookie的属性。需要注意的是,Cookie必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号;和空格分隔。了解了

  信息的发送方式后,接下来,通过一张图来描述Cookie在浏览器和服务器之间的传输过程,具体如图5-1所示。

  中,描述了Cookie在浏览器和服务器之间的传输过程。当用户第一次访问服务器时,服务器会在响应消息中增加Set-Cookie头字段,将用户信息以Cookie的形式发送给浏览器。一旦用户浏览器接受了服务器发送的Cookie信息,就会将它保存在浏览器的缓冲区中,这样,当浏览器后续访问该服务器时,都会在请求消息中将用户信息以Cookie的形式发送给Web服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。

  Cookie的基本使用Cookie将用户的信息保存到客户端浏览器的一个技术

  ,当下次访问的时候,浏览器会自动携带Cookie的信息过来到服务器端.Cookie的基本使用:

  的有效时间。如果没有设置,cookie只缓存浏览器缓存中,浏览器关闭,cookie删除。

  允许被访问的路径。设置的路径,以及子路径都被允许访问。例如:setPath(/web/a/b);

  (无关路径)常见设置:setPath(“/”) ,当前tomcat下的所有的web项目都可以访问

  相关知识点:2.2.1Session的概述2.2.1.1什么是Session当人们去医院就诊时,就诊病人需要办理医院的就诊卡,该卡上只有卡号,而没有其它信息。但病人每次去该医院就诊时,只要出示就诊卡,医务人员便可根据卡号查询到病人的就诊信息。

  Session技术就好比医院发放给病人的就医卡和医院为每个病人保留病例档案的过程。当浏览器访问

  Web服务器时,Servlet容器就会创建一个Session对象和ID属性,其中,Session对象就相当于病历档案,ID就相当于就诊卡号。当客户端后续访问服务器时,只要将标识号传递给服务器,服务器就能判断出该请求是哪个客户端发送的,从而选择与之对应的Session对象为其服务。需要注意的是,由于客户端需要接收、记录和回送

  对象的ID,因此,通常情况下,Session是借助Cookie技术来传递ID属性的。为了使读者更好的理解

  ,接下来,以网站购物为例,通过一张图来描述Session保存用户信息的原理,具体如图5-5所示。

  中,用户甲和乙都调用buyServlet将商品添加到购物车,调用payServlet进行商品结算。由于甲和乙购买商品的过程类似,在此,以用户甲为例进行详细说明。当用户甲访问购物网站时,服务器为甲创建了一个Session对象(相当于购物车)。当甲将

  Nokia手机添加到购物车时,Nokia手机的信息便存放到了Session对象中。同时,服务器将

  Session对象的ID属性以Cookie (Set-Cookie: JSESSIONID=111)的形式返回给甲的浏览器。当甲完成购物进行结账时,需要向服务器发送结账请求,这时,浏览器自动在请求消息头中将Cookie (Cookie: JSESSIONID=111)信息回送给服务器,服务器根据ID属性找到为用户甲所创建的Session对象,并将Session对象中所存放的Nokia手机信息取出进行结算。2.2.1.2

  为什么要使用会话使用servlet生成验证码时,我们需要在服务器记录一份生成的随机字符,当用户提交填写的数据时,将用户输入的数据和服务器缓存的数据进行比对。

  我们发现将数据保存到ServletContext和request中是存在问题的,那么就需要使用会话技术保存用户的私有信息.

  .Session存到服务器端的技术,没有大小和个数的限制.* Cookie相对于

  如何使用Session:Session是与每个请求消息紧密相关的,为此,

  上面重载的两个方法都用于返回与当前请求相关的HttpSession对象。不同的是,第一个getSession()方法根据传递的参数来判断是否创建新的HttpSession对象,如果参数为true,则在相关的HttpSession对象不存在时创建并返回新的HttpSession对象,否则不创建新的HttpSession对象,而是返回null。第二个getSession()方法则相当于第一个方法参数为true时的情况,在相关的HttpSession对象不存在时总是创建新的HttpSession对象。

  对象管理会话数据,不仅需要获取到HttpSession对象,还需要了解HttpSession对象的相关方法。HttpSession接口中定义的操作会话数据的常用方法如表5-2所示。表5-1 HttpSession接口中的常用方法

  创建的时间,这个时间是创建Session的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式

  相关请求的时间,这个时间是发送请求的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式

  列举了HttpSession接口中的常用方法,这些方法都是用来操作HttpSession对象的。2.3

  HttpServletRequest :针对一次请求。使用该对象保存数据,一次请求(一个页面,如果是请求转发多个页面)内数据有效.

  Cookie中的值(所有浏览过商品的ID)1-3* *判断现在浏览的商品是否已经在浏览器记录中

  Cookie将商品的ID们回写到浏览器.* 4.页面跳转到商品详情的页面

  Cookie中的值(所有浏览过商品的ID)1-3* *判断现在浏览的商品是否已经在浏览器记录中

  Cookie将商品的ID们回写到浏览器.* 4.页面跳转到商品详情的页面

  声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。