关于web应用程序的范围与session变量丢失问题的…
2008-02-23 09:45:36来源:互联网 阅读 ()
引言:最近不少网友都有这样的疑问,就是当我们在一个网页间设定了一个session变量后,到另一个网页,却消失了。这
是什么样的原因呢。如果你详细的读完本文,相信能给你一个完整的答复!
一:前言--关于web应用程序
我们今天所讨论的web 应用程序是指由Windows NT Option Pack 提供的一个建立 Internet 或Intranet的 Web应用程
序的平台。而Web 应用程序可以作为一组 Web 页交付使用,它们向封装了事务逻辑并提供访问存储重要商业信息的数据库
应用程序和 ActiveX 组件提供用户界面。也就是我们使用的asp程序。
创建应用程序时,必须用 Internet 服务管理器在 Web 站点中指定应用程序的启动点目录。在发现其他启动点之前,
Web 站点某启动点目录下的每个文件和目录被视为是应用程序的一部分。因此,可以使用目录边界定义应用程序的范围。
基于 ASP 的应用程序是 ASP 页和 ActiveX 组件的集合。当用户定义应用程序时,将使用 IIS指定用户的 Web 站点中
应用程序启动点的目录。在用户的 Web 站点中每个位于启动点目录下的文件和文件夹都被认为是应用程序的一部分,直到
发现另外的启动点目录为止。这样,用户就可以使用目录作为边界定义应用程序的作用域。每个 Web 站点可以有多个应用
程序,而每个应用程序的配置都可以不同。
二:web应用程序的范围
正如上面的定义所提到的。我们将一个web应用程序,如:购物程序,新闻程序,聊天程序......等这样一些我们开发
的asp页面单独集中来成为一个web应用程序。结合实例来说,如我们将一个购物程序的所有页面(如:注册页面,购物
车,收银台,订单页面,商品页面)统一起来,统称为一个web购物程序,它的应用程序范围就是从购物开始购物结束所涉
及到的所有页面。而在iis中,系统须将其分配到一个虚拟目录中去,而该虚拟目录的所有页面,及其子目录就是其购物程
序的物理范围。如下表所示。
*shop—index.asp
—buy.asp
catalog—list.asp
customer—a.asp
—b.asp
其中*号,代表的是一个虚拟目录, 代表的是其中的子目录。所以,整个上面的所有页面构成了一个web应用程序。但是,
也可以在一个虚拟目录下建立另一个应用程序。如下表
*shop—index.asp
—buy.asp
*book—book.asp
catalog—list.asp
customer—a.asp
—b.asp
这样,shop下的index.asp,list.asp,a.asp等属于一个应用程序,而book下的book.asp则不属于shop,他是一个新的web应
用程序。
三:web应用程序范围的设置与应用
如果你的开发环境是Visual InterDev6.0,那么,应用程序的设置几乎不用你费心去考虑,一切有VI6来给你设置好
了,并在IIS中自动建立了虚拟目录,但如果是其他的话,你可能需要在IIS中自己去设定他。具体步骤如下:
创建应用程序
1--在“Internet 服务管理器”中,选择作为应用程序启动点的目录。可以将 Web 站点的主目录指定为 应用程
序的启动点。
2--打开该目录的属性页,然后单击“主目录”、“虚拟目录”或“目录”选项卡。
3--在“名称”文本框中,为应用程序键入名称。'当然,应用程序的名称也不是必要的。但推荐设定。
4--单击“创建”按钮。
此后,你就可以将你的web应用程序目录映射到该目录下即可。
明白以上的基本定义,对我们网络开发人员十分必要,应为,正是由于有了一个web应用程序的范围,才可以使web应用
程序能够在应用程序的文件间共享信息,例如,ASP 应用程序可在其网页间共享环境流、会话状态和变量设置。也就是我
们经常使用的session,application对象等。应为只有规定了一个应用程序及其范围,session,application等对象才有意
义。
四:session变量“丢失”的问题
谈到了那么多的概念,终于可以说道实质性的问题了,session对象是web应用程序中最重要的对像之一,正是它的存
在,使得我们可以在跨网页间传送数据,分辨不同用户成为可能。我们只要将变量制定给session即可实现。这一过程即
session("temp")=temp即可。但最近不少网友都有这样的疑问,就是当我们在一个网页间设定了一个session变量后,到另
一个网页,却消失了。这是什么样的原因呢。
根据上面的概念,我们可以将其原因,和处理办法总结如下。
1:asp网页跨了多个web应用程序:
这个原因就是你的另一个网页可能是另一个web应用程序。以前,一些资料过分的强调了会话变量的单一性,好像一个
用户连接到一个web主机之后,只可能创建一个会话变量,这是不对的,分辨会话变量的依据正是我们上面所提到的web应
用程序范围,而不是单独根据用户而建立的,你可以试一试下面的一段代码。
test.asp
<% @ language=vbscript %>
<%
session("temp")="temp"
Response.Write session.SessionID 'sessionID用来分辨一个应用程序间的单独客户。
%>
将test.asp分别拷贝到两个不同的虚拟目录下。你就可以看到,他是两个不同的值了。所以,可能你的网页跨了不同的应
用程序。
当然,这种情况对于初学者可能碰到,对于有经验的人可能犯的是这样的错误,即他们本身为一个根目录,但在制定虚
拟目录时将其子目录又设为一个虚拟目录了,就如同我们上面提到的第二个表结构一样。这样他同样成为了两个不同的web
应用程序。也就不难解释为什么会出错了。
2:可能是启动了多个同一应用程序。
第一种情况很好发现,也容易改正,但这第二种情况就不容易发现,也较难改正。这里我们引入一个另一个的概念。多
个同一应用程序共存,(好长呀,关键是微软的概念我忘了,这个是我自己起的。呵呵!),它的意思从这个定义上很好
理解,就是对于同一个应用程序。同一时间可以在内存中存在多个。如我们常见的acdsee.exe,你可以通过点击启动多个
acdsee.exe。而另外一种则不能,我们就不说它的定义了(如果说的话,就是相同应用程序不共存,呵呵!)在同一时间
内,如果已经启动了一个应用程序,则不能再启动相同的应用的应用程序了。如foxmail.exe,当你启动了一个
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:ASP学习:远程注册自己的组件
下一篇:ASP程序表单数据提交问题
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash