The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
          ASP中的Session本身是可以儲存對象的,它可以保存基本變量,數(shù)組,自動化對象(Automation Object)等,但在儲存自定義類的對象時會碰到問題。

          如下面的代碼:

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

          If isempty(Session("node")) Then Set Session("node")=New ListNode

          Set n=Session("node")

          Response.Write n.Content

          %>

          還是上面的ListNode這個類,這段代碼意圖在一個用戶會話中只保留一個ListNode的對 象。所以在用戶第一次訪問該網(wǎng)頁時,會生成ListNode的一個對象,并保存在Session("node")中;后面訪問該網(wǎng)頁時,因?yàn)? Session("node")不為空了,所以不會生成一個新的對象,而是到 Session("node")中取出保存的對象。

          理論上應(yīng)該也會輸出100,但是問題來了,ASP一直會報(bào)錯:

          Microsoft VBScript runtime error '800a01b6'

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

          用n.Type也會出錯。同樣的代碼翻譯成PHP,運(yùn)行卻是可以通過的。為什么?

          個人分析下來,認(rèn)為Session可以保存對象是沒錯,只是VBScript中類型轉(zhuǎn)換的機(jī)制太 弱,而且沒有顯式的強(qiáng)制類型轉(zhuǎn)換供用戶使用,無法將 Session("node")正確轉(zhuǎn)換為ListNode類型。因?yàn)槭亲远x的類,我們只能在每個頁面中都出現(xiàn)類的定義語句,這樣在ASP看來,每次讀 取這個頁面時,ListNode類都是一個新類,所以就不認(rèn)得Session中的這個類的對象了。

          結(jié)論:盡量不要想到用Session或Application來存儲ASP中自定義類的對象。如果 確實(shí)需要,可以考慮用COM來編寫類,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")來創(chuàng)建一個對象,然后即可實(shí)現(xiàn)上面預(yù)想的功能了。

          posted on 2010-05-13 10:07 Eric_jiang 閱讀(245) 評論(0)  編輯  收藏 所屬分類: ASP
          主站蜘蛛池模板: 安新县| 大英县| 宿迁市| 尼玛县| 阿拉善左旗| 小金县| 青州市| 观塘区| 新营市| 五莲县| 聂拉木县| 临洮县| 天镇县| 大同市| 汤阴县| 大方县| 亚东县| 南和县| 东平县| 丰原市| 南京市| 吉林市| 信阳市| 乌拉特前旗| 万盛区| 永顺县| 临沂市| 福安市| 平湖市| 牙克石市| 富锦市| 油尖旺区| 古丈县| 乐陵市| 昂仁县| 保亭| 邢台县| 江孜县| 紫阳县| 正蓝旗| 宜州市|