会话技术全面介绍

作者: 小小蒜头 | 来源:发表于2017-03-17 19:28 被阅读101次

    Tip:会话


    什么是会话?

       会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。我们再举个例子:就类似于打电话,说了一大堆内容,然后挂掉电话。这个过程就类似于一个会话。

    会话过程中要解决的一些问题?

       每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据。

       例如:用户点击超链接通过一个servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户点结账servlet时,结账servlet可以得到用户商品为用户结账。

       思考:用户购买的商品保存在request或servletContext中行不行?

    跟着我继续往下看,有惊喜哦!

    某个网站提供了两个超链接(购买和结账),用户打开浏览器,点击购买超链接,请求交给BuyServlet处理,BuyServlet收到请求后,帮用户完成商品的购买。BuyServlet一定要将用户买的商品存起来,以便于用户在点击结账时,PayServlet得到用户购买过的商品,为用户结账。在服务器上如何保存用户购买过的商品呢?之前学javaweb时我们知道每个用户请求服务器都会产生一个request,那我们把用户的数据存在request里面行不行呢?如图所示:

    图1

    当用户将买的一台洗衣机的数据存进request里后,点击结账时,会产生一个新的request,就拿不到之前所购买的数据。So,通过request对象将数据带过去肯定不行。(会有疑问,就是在将购买商品存进request里后,用forword技术转发给payServlet,那这web资源共享的就是同一个request,就可以得到用户购买的商品为用户结账,技术上是可以这样做,但这样用户体验性就不好差,因为用户每次一点购买就要结账,不能将购买商品统一好再进行结账)。

    Cookie技术

    用户购买商品时,buyServlet(servlet1)会以cookie的技术回写给用户浏览器,由于回写的是一个cookie,那浏览器这时候就会把用户的数据保存起来(在缓存或本地硬盘),用户点payServlet(servlet2)去结账,由于浏览器缓存了用户数据,会带着用户数据找服务器,payServlet知道用户买了什么东西,从而结账。

    session技术

    buyServlet(Servlet1)时,先通过request.getSession();创建一个session对象,然后再将数据洗衣机存进session中去,这时就对浏览器A产生一个session,当用户结账时,因为之前已经创建过了session,所以这次只需要取出之前创建的session中的数据。数据不会有冲突,当浏览器B进来时,服务器再次创建session,存数据电视,结账时再将数据取出来,同理,当浏览器C进来时也是如上操作。

    不知我这样讲,你会否懂了呢!

    相关文章

      网友评论

      • 6d96978eeefb:另外你的文章中有一点非常重要的背景信息没有介绍,就是在http协议中,浏览器端对服务器端的访问是无状态的。也就是说从原理上来讲,对于浏览器的每一个请求,服务器都会认为它是一个完全独立的请求,跟之前和之后的没有任何关系。这对于服务器端的编程带来了极大的挑战,因为它有时候希望知道某几个访问是同一个人发出的,方便追踪状态(比如说购物车),但是http协议没有提供这样的功能。所以对于服务器来说(比如servlet规范),它就必须要想一些办法能够让自己知道客户端对自己的几次访问是不是同一个人,这里面利用了cookie等技术,在服务器端进行包装以后,提供了session这个功能。我们程序员在使用的时候,就变得非常简单,直接调用它提供的session相关的api就可以了。
        小小蒜头: @TW李鹏 嗯嗯,谢谢指导
      • 6d96978eeefb:有几个地方可以改进一下。当你说“会话”这个词的时候,最好能够注明他的英文session,不然一般很难理解。另外对于程序员来说,大多数情况直接说session这个词,否则会感觉不知道对方在说什么
        小小蒜头: @TW李鹏 明白,要用专业术语
      • 6d96978eeefb:非常全面的介绍了会话技术,图文并茂,很好

      本文标题:会话技术全面介绍

      本文链接:https://www.haomeiwen.com/subject/tzfynttx.html