A 开发中的(Vcript)类基础学习(2)_.NET概论及软件使用_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

A 开发中的(Vcript)类基础学习(2)

作者:黑客防线网安ASP维护基地 来源:黑客防线网安ASP维护基地 浏览次数:0

本篇关键词:学习基础开发Session
黑客防线网安网讯:  ASP中的Session本身是可以储存对象的,它可以保存基本变量,数组,自动化对象(Automation Object)等,但在储存自定义类的对象时会碰到问题。  如下面的代码:以下是引用片段:<%If is...

  ASP中的Session本身是可以储存对象的它可以保存基本变量数组,自动化对象(Automation Object)等,但在储存自定义类的对象时会碰到问题

  如下面的代码:

以下是引用片段:
<%
If isempty(Session("node")) Then Set Session("node")=New ListNode
Set n=Session("node")
Response.Write n.Content
%>


  还是上面的ListNode这个类,这段代码意图在一个用户会话中只保留一个ListNode的对 象所以在用户第一次访问该网页时,会生成ListNode的一个对象,并保存在Session("node")中;后面访问该网页时,因为 Session("node")不为空了,所以不会生成一个新的对象,而是到 Session("node")中取出保存的对象。

  理论上应该也会输出100,但是问题来了,ASP一直会报错:

  Microsoft VBScript runtime error '800a01b6'

  Object doesn't support this property or method: 'n.Content'

  用n.Type也会出错。同样的代码翻译成PHP,运行却是可以通过的。为什么?

  个人分析下来,认为Session可以保存对象是没错,只是VBScript中类型转换的机制太 弱,而且没有显式的强制类型转换供用户使用,无法将 Session("node")正确转换为ListNode类型。因为是自定义的类,我们只能在每个页面中都出现类的定义语句,这样在ASP看来,每次读 取这个页面时,ListNode类都是一个新类,所以就不认得Session中的这个类的对象了。

  结论:尽量不要想到用Session或Application来存储ASP中自定义类的对象。如果 确实需要,可以考虑用COM来编写类,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")来创建一个对象,然后即可实现上面预想的功能了。

 

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14358-1.html
网站维护教程更新时间:2012-03-30 05:46:02  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer