2007.4.21
我们在现实中遇到的大多数web应用程序都会有这样一个需求,需要一种机制能够唯一标识一个用户,这样服务器就可以区分每一个用户,并记录他的状态,比如购物车等,这时就需要利用这种会话跟踪机制。
用于会话跟踪的技术:
Java Servlet API用Session来跟踪会话和管理会话内的状态,利用Session,服务器可以把用户的所有请求联系在一起,并记录用户的操作状态。当用户第一次连接到服务器时服务器将建立一个session,并分配给用户一个唯一的表示Session ID,以后每次用户提交请求时,都会将词Session ID一起提交。所以服务器可以利用Session ID来区分每一个用户。
在Servlet规范中,支持三种机制用于会话跟踪:
SSL
Cookies:是一种由服务器发送给客户端的片段信息。存储在客户机浏览器的内存中或者硬盘上。
URL重写:当用户禁止Cookies时应采用URL重写来实现会话跟踪。就是在URL中嵌入标识客户的Session ID,Servlet容器解释URL,取出Session ID,根据Session ID来与特定的Session 联系.通过调用HttpServletResponse接口中的encodeURL()方法和encodeRedirectURL()方法来实现.
在javax.servlet.http.HttpSession定义了Session这一概念,利用javax.servlet.http.HttpSession接口中的一些方法就可以实现用户登录等需要唯一表示用户的web程序。当用户禁止cookies时需要用URL重写来实现。当退出后,服务器将无法找到原来的Session,如果用户再次连接,服务器将建立新的session。
如果不使用Session而是用Cookies来实现用户登录,则可以利用Cookies将用户名和密码存储在用户的硬盘上,下次再登录时,浏览器会将先前保存的Cookies一同发送到服务器,服务器的Web应用程序从Cookies里找到用户名和密码进行验证,通过验证后,用户就可以直接访问了,所以,在很多论坛的网站上多采用此方式,当该用户下次访问该论坛时,可以不用登录,直接进入,原因就在一Cookies记录了该用户的用户名和密码,并且存储在硬盘中了。
需要注意的是利用Cookies保存用户登录的用户名和密码是存在着很大的安全隐患的,因为别人也可以从你机器上的Cookies文件中看到这些信息。而且Cookies在网上以明文传输,容易背别人截取或篡改。