28 一月 2008

什么是会话跟踪?

以网上购物为例,用户甲选购了一件物品,放进了购物车,然后紧接着继续购买其他物品,对于web服务器而言,它需要记住购物车中已经购买的物品。如果用户乙也登陆到该网站,并购买了物品,放进购物车,然后结算,可是对于服务器而言,它如何区分结算的是哪一个用户?当然,我们可以考虑为每一个用户创建一个购物车,那么自然知道哪一个用户购买的物品要进行结算。但是实际上而言,这个购物车状态是在服务器端维护的,而客户端与服务器端进行通信的协议HTTP本身是基于请求/响应模式的、无状态的协议。即当客户端和没有提交请求,连接也将关闭。即使HTTP1.1支持持续连接,但当长时间没有提交请求,连接也将被关闭。这样,当下一个用户与服务器建立连接,发出请求,服务器如何知道这个连接请求到底属于哪一个用户?因此,我们不仅需要区分每一个用户,同时还需要知道每个用户的状态。即我们必须区分每个用户的购物车,同时也必须知道每个购物车中的购物信息。因此需要以下机制:会话和状态:

  • 会话:服务器应当标识出来自单个客户的一系列请求,并把这些请求组成一个单独的工作“会话”。通过把特定的请求与一个特定的工作会话相联系,购物车就能够把一个用户和另一个用户区分开。

  • 状态:服务器应当能够记住前面请求的信息,以及对前一请求作出的处理信息。也就是说,服务器应当给每个会话联系状态。对于购物车应用程序而言,可能的状态包括用户喜欢的项目类别,用户的配置信息和购物车本身。


Java Servlet API使用Session进行会话跟踪和会话状态的管理。利用Session,服务器将客户的所有请求联系在一起,并记住客户的操作状态。当客户第一次连接到服务器的时候,服务器为其建立一个Session,并分配给客户一个唯一的标识(Session ID),以后客户每次提交请求,都要将标识一起提交。服务器根据标识找出特定的Session,用这个Session记录客户的状态。通过在每一个请求和响应中包含Session ID,服务器就可以将一个用户和另一个用户区分开。在Servlet规范中,通过以下三种机制进行会话跟踪:

  • SSL会话

  • Cookies

  • URL重写


以上内容参考了相关资料

没有评论: