在web上创建状态
在页面请求和站点访问之间提供状态常用的方法是通过cookie。我们在前面的章节中已经看到,如何在客户端的计算机中存放相应的值,这些值与每个页面请求一起发送给对此cookie有效的域。通过用asp检查和更新cookie,在某种程度上能够保持一个状态。可以使用所包含的信息来识别用户,然后把用户连接到一个已存储相应值的集合。
例如,可以检测一个用户请求是否包含一个站点指定的cookie。如果不包含,则为该用户分配一个某种类型的标识,指明一个数量,并存储在带有一个长有效期的cookie中。以后该用户对这个站点的每一次访问,都能够检测到cookie并更新所包含的信息。同时可以收集有关访问的次数和持续时间的数据,并存储在服务器上,以备将来使用。
但是,如果用户转移到另一个计算机,或删除了cookie,或者他们的浏览器拒绝接收发送给他们的cookie,会发生什么事情呢?在这种情况下,不能维持状态,因为下一次不能识别他们现在,web上有许多cookie,大多数人会接受它们,而不加理会。如果打开浏览器中的“warn before accepting cookies”选项,接着漫游几个大的站点,你就会明白其中的含意。
1. 匿名访问者与授权的访问者
如果认为cookie是一个有点草率的解决方案,可以使用更直接的方法。许多站点采用的一种方法是,在访问者点击一个站点时,或者点击一个要求验证身份的页面时,弹出一个进行登录的对话框。访问者首先必须进行注册,获得一个某种类型的用户名/口令的组合,才能允许访问相应的站点或页面。
为了证实访问者是一个已知的并且合法的用户,在访问者的计算机上放置的一个cookie,它或者保存注册的详细数据,或者是一把表明已验证过身份的“钥匙(key)”。同时,访问者的详细数据永久地保存在服务器上,准备再次访问时使用。如果访问者的浏览器中有了这样一个cookie,他就可以自由地访问该网站,因为已经验证过了。
如果cookie没有有效期限(expires),cookie的值在关闭浏览器时自动消失,在下一次访问时必须重新注册和再次验证。当然,如果拒绝接收cookie或删除了cookie,就只能再次得到注册对话框。这样的话,如果不被识别,就不能访问该站点。
通过强制用户就像注册到自己的网络一样注册到web服务器,windows 2000整体安全性能为iis提供更强和更安全的验证功能。但是,这只能与inte.net explorer 3.0和之上版本的浏览器一起工作。iis也可以使用basic验证允许非microsoft浏览器注册web服务器。
2. 不再有匿名访问者
在iis web服务器上使用asp时,除非用户离开该站点到另一个网站或者关闭了浏览器,否则能在当前会话中跟踪用户。在本章的后面,将看到如何使用这个功能来标识一个访问者、存储用户的本地信息和提供状态。下面与已经讨论过的解决方案相比较,讨论其工作方式。
asp和iis共同提出了一个用户会话的概念,通过asp session对象进行交互。在每个访问者第一次访问服务器上的一个asp网页时,为他创建一个新的并且独立的会话对象,分配给该会话一个会话标识号,并把包含会话标识符的特殊加密版本的一个cookie发送给客户。
cookie的路径(参看前面的章节有关cookie属性的描述)设置为运行在服务器上的asp应用程序的根路径。这很可能上缺省的web网站的根目录(即“/”),但也可能会是另外一个值(稍后会看到)。在cookie中没有提供expires值,所以当浏览器关闭时,cookie值也就消失。
每当这个用户访问这个asp网页,asp都会查找这个cookie。命名为aspsessionidxxxxxxxx,其中每个x是一个字母字符。从第2章图2-7所示的servervariables集合,能够在http报头中看到它。
但是,这个cookie不会出现在 request.cookies或response.cookies集合中,asp把它隐藏起来,但仍保存在浏览器上。对于每个asp网页请求,asp都要查看该值。这个cookie包含的值,指明了这个用户的会话。因此,相应的session对象(该对象在内存中已被处理,并且一直包含所有在前一页面请求过程中进行操作的值)的内容可以移交给asp网页中的脚本。
当然,如前所述,如果客户浏览器不接收或不支持这些cookie,这个处理将失败。在这种情况下,不能创建asp会话,对这个访问者的状态也不进行自动维护。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器