亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        如何在ASP和ASP.NET中共享會話狀態(tài)

        2007-01-01 00:00:00馬文婕劉清堂
        現(xiàn)代教育技術(shù) 2007年6期

        【摘要】ASP.NET的出現(xiàn)大大提高了編寫的站點(diǎn)的性能,但傳統(tǒng)的ASP技術(shù)也需要同時應(yīng)用,兩種技術(shù)間會話狀態(tài)的共享是必須解決的問題。文章即對實(shí)際編程時如何在ASP和ASP.NET中共享會話狀態(tài),介紹了實(shí)現(xiàn)原理,給出了具體的操作步驟。

        【關(guān)鍵詞】ASP,ASP.NET,會話狀態(tài),共享

        【中圖分類號】G434【文獻(xiàn)標(biāo)識碼】B 【論文編號】1009—8097(2007)06—0061—04

        一、前言

        在構(gòu)建教育網(wǎng)站、教育資源庫等網(wǎng)上平臺時經(jīng)常會用到ASP.NET技術(shù),Microsoft ASP.NET是新的 Microsoft 技術(shù),用于開發(fā)基于 Web 的應(yīng)用程序。相比傳統(tǒng)的 ASP 腳本技術(shù)而言,它具有很多優(yōu)點(diǎn),包括:(1)將UI表示形式從業(yè)務(wù)邏輯中分離出來,從而提供更好的開發(fā)結(jié)構(gòu);(2)其代碼是完全編譯的,而在傳統(tǒng)ASP中代碼是解釋的;(3)其編譯特性結(jié)合其高速緩存支持,這就意味著相對用傳統(tǒng)ASP編寫的等效站點(diǎn)而言,使用ASP.NET編寫的站點(diǎn)的性能有顯著提高[1]。

        在“國家知識服務(wù)體系支撐技術(shù)研究”項(xiàng)目中,用到了ASP和ASP.NET兩種技術(shù)。由于在ASP.NET中,Session的存儲機(jī)制與ASP的存儲機(jī)制不一樣,雖然可以在同一個IIS下同時運(yùn)行.asp與.aspx,但是ASP 腳本將會話狀態(tài)信息存儲在內(nèi)存中,不能與其他應(yīng)用程序(如 ASP.NET)共享。因此,就涉及到如何解決對話狀態(tài)共享的問題。

        微軟的msdn文檔里提出了一個Session共享的解決方案,但此文檔說明原理時偏重于代碼編寫,略顯晦澀,而且也沒有說明具體的操作步驟,應(yīng)用起來有許多不清楚的地方,不易操作。所以,本文首先對共享原理加以說明,然后主要討論了如何利用這種原理,在實(shí)際操作中實(shí)現(xiàn)ASP與ASP.NET之間session的共享。

        二、共享實(shí)現(xiàn)原理

        (一)原理綜述

        ASP和ASP.NET之間標(biāo)識會話狀態(tài)用到了Cookie,它是Web應(yīng)用程序用來標(biāo)識用戶會話的最常用方法。ASP將會話狀態(tài)信息存儲在內(nèi)存中,不能與其他應(yīng)用程序(如ASP.NET)共享。如果會話狀態(tài)以一種通用格式存儲在Microsoft SQL Server中,則傳統(tǒng)的ASP和ASP.NET都能訪問會話狀態(tài)。

        在ASP和ASP.NET共享會話狀態(tài)時,使用了一個名為mySession的cookie來標(biāo)識用戶會話。當(dāng)用戶向Web應(yīng)用程序發(fā)出請求時,該用戶將被發(fā)放一個唯一的cookie以便標(biāo)識該會話;此后在其后續(xù)請求中,瀏覽器將此唯一的cookie發(fā)送回服務(wù)器以標(biāo)識該會話;在加載所請求的Web頁面之前,一個自定義的對象利用此唯一的cookie從SQL Server中重新加載用戶會話數(shù)據(jù),在Web頁面中通過該自定義的對象即可訪問會話狀態(tài);當(dāng)Web請求結(jié)束后,隨著該請求的終止,會話數(shù)據(jù)將被保存回SQL Server中(見圖1)[1]。

        (二)ASP.NET實(shí)現(xiàn)原理

        在ASP.NET中,每個Web頁面都是從System.Web.UI.Page類派生出來的,Page類中包含HttpSession對象的一個實(shí)例以用于會話數(shù)據(jù)。在此,從System.Web.UI.Page派生了一個名為SessionPage的自定義Page類,以實(shí)現(xiàn)與Page類完全相同的各種特性。派生頁的唯一不同之處就是利用一個自定義的會話對象重寫了默認(rèn)的HttpSession。這個自定義的會話類負(fù)責(zé)將會話狀態(tài)存儲到內(nèi)存中,并且將會話數(shù)據(jù)類型限定為僅允許字符串型,以實(shí)現(xiàn)與ASP之間的互操作(默認(rèn)的HttpSession允許將任何類型的數(shù)據(jù)存儲在會話中,這將不能與ASP互操作)。

        Page類公開了不同的事件和方法以供進(jìn)行自定義,其中OnInit方法用于設(shè)置Page對象的初始化狀態(tài)。在頁面初始化時,如果用戶的請求不具有唯一的mySession cookie,則將給請求者發(fā)放一個新的唯一的mySession cookie;如果有,就利用一個自定義的數(shù)據(jù)訪問對象(SessionPersistence)從SQL Server中檢索會話數(shù)據(jù)(數(shù)據(jù)庫連接從web.config中檢索到)[1]。為了獲得最佳性能,SessionPersistence類以二進(jìn)制格式對會話狀態(tài)進(jìn)行序列化和反序列化,再將所得到的二進(jìn)制會話狀態(tài)數(shù)據(jù)以image字段類型存儲在SQL Server中。

        當(dāng)該請求結(jié)束時,將激發(fā)Page類的Unload事件,相應(yīng)的事件處理程序?qū)挃?shù)據(jù)序列化成二進(jìn)制格式,并將所得的二進(jìn)制數(shù)據(jù)保存到SQL Server中。

        SessionPage類及其相關(guān)類都封裝在SessionUtility程序集中。在ASP.NET項(xiàng)目中,要建立一個對SessionUtility程序集的引用,并且為了與ASP共享會話,要從SessionPage而不是Page類派生出每個頁面[1]。

        (三)ASP實(shí)現(xiàn)原理

        本機(jī)的ASP會話只能將會話數(shù)據(jù)存儲在內(nèi)存中,為了將會話數(shù)據(jù)存儲到SQL Server中,要編寫一個自定義的COM對象以管理會話狀態(tài),而不使用本機(jī)的會話對象進(jìn)行管理。這個COM對象將在每個Web請求開始時得以實(shí)例化,并從SQL Server處重新加載會話數(shù)據(jù)。當(dāng)ASP腳本完成時,此對象將終止,并且會話狀態(tài)將被保存回SQL Server中。

        COM Session對象的主要目的就是提供對Microsoft Internet Information Server內(nèi)部對象的訪問。它使用SessionUtility程序集的mySession類來保留會話狀態(tài),并使用SessionUtility的SessionPersistence類從SQL Server中加載會話數(shù)據(jù)或?qū)挃?shù)據(jù)保存回SQL Server。利用regasm.exe,mySession和SessionPersistence類可被公開為COM對象。regasm.exe能夠注冊并創(chuàng)建一個類庫,以便COM客戶端使用各個框架類[1]。

        三、具體實(shí)現(xiàn)步驟

        (一)首先,確保整個項(xiàng)目應(yīng)用程序(ASP和ASP.NET)的數(shù)據(jù)庫只有一個。在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表SessionState來存放會話狀態(tài)。

        打開SQL Server查詢分析器,運(yùn)行以下腳本來創(chuàng)建數(shù)據(jù)表,數(shù)據(jù)表名為SessionState。

        (四)關(guān)閉IIS中ASP的Session選項(xiàng)

        打開IIS,選擇站點(diǎn),右擊依次選擇屬性->主目錄->配置->應(yīng)用程序選項(xiàng),將啟用會話狀況前的復(fù)選勾去除(見圖2)。

        (五)安裝SessionUtility.dll

        SessionUtility.dll即上文的自定義COM對象。

        首先找到 gacutil.exe 文件,一般情況下在 Microsoft Visual Studio .NET 2003\\SDK\\v1.1\\Bin 目錄下。

        運(yùn)行cmd命令,在命令提示符窗口中,執(zhí)行 gacutil /i SessionUtility.dll,如果執(zhí)行失敗,則將命令的當(dāng)前目錄改為gacutil.exe 文件的所在目錄,如D:\\Program Files\\Microsoft Visual Studio .NET 2003\\SDK\\v1.1\\Bin,再執(zhí)行g(shù)acutil /i F:\\session\\SessionUtility.dll(將SessionUtility.dll的路徑也寫全)。

        (六)注冊SessionUtility.dll為Com對象

        同樣,要找到 regasm.exe 文件,一般情況下在 WINDOWS \\Microsoft.NET\\Framework\\v1.1.4322目錄下。

        運(yùn)行cmd命令,在命令提示符窗口中,執(zhí)行regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb,最好寫全兩個文件的路徑, 具體方法同上。這樣就會在SessionUtility.dll所在的文件夾下產(chǎn)生出一個tlb文件, 可以當(dāng)作普通的Com組件來調(diào)用。

        (七)注冊SessionManager.dll

        這步很簡單,運(yùn)行cmd命令,在命令提示符窗口中,執(zhí)行regsvr32 SessionManager.dll,同樣最好寫全兩個文件的路徑,具體方法同上。regsvr32.exe通常在WINDOWS\\system32下。

        (八)如果是NTFS格式的系統(tǒng),找到 SessionMgr.dll,右鍵點(diǎn)擊“屬性”,將IUSR權(quán)限設(shè)置為可讀和可執(zhí)行。

        至此,已經(jīng)可以實(shí)現(xiàn)ASP與ASP.NET之間Session的共享了。

        在ASP中,要在頁面的開始端和結(jié)束端分別加上以下代碼:

        而在ASP.NET中,要如下使用:

        首先,在項(xiàng)目中添加對SessionUtility的引用,并且編譯通過;

        其次,編碼時,將原來的繼承 public class WebForm1:System.Web.UI.Page,修改為public class WebForm1:MSDN.SessionPage(SessionPage類封裝在SessionUtility中)。

        這樣就可以使用Session(\"UserID\")這樣的形式在ASP和ASP.NET中共享會話狀態(tài)了。

        四、注意事項(xiàng)

        完成以上步驟后,Session就可以在ASP和ASP.NET中實(shí)現(xiàn)共享了,但是還有一些細(xì)節(jié)上的問題會影響到共享效果,如下:

        (一)雖然Session實(shí)現(xiàn)了共享,但是Session的使用語法,相對于.NET中新增的部分,就沒有實(shí)現(xiàn),畢竟要照顧ASP,比如Session.Remove就不能用了。

        (二)如果原來ASP和ASP.NET各自有自己的數(shù)據(jù)庫,要將其合為一個,也就是最終在Web.config文件中appSettings里和global.asa文件中Application(\"SessionDSN\")里所連接的數(shù)據(jù)庫。

        (三)ASP的文件要放在ASP.NET文件夾下,并且在IIS中建立虛擬目錄時指向此ASP.NET文件夾。

        (四)global.asa文件中Session.Timeout = 20和Session. Abandon兩句代碼要刪掉或注釋掉,否則第一次登錄.asp網(wǎng)頁時會提示global.asa文件中有錯誤,刷新頁面才能進(jìn)入(因?yàn)镮IS中本機(jī)的會話被禁用,缺少默認(rèn)的session)。

        (五)移植程序時一定要將代碼中所有的虛擬目錄改為新建的虛擬目錄(指向包括ASP文件的ASP.NET文件夾)的名字。

        五、結(jié)束語

        微軟的msdn中對于session的共享原理及代碼已經(jīng)講解的比較清晰,所以文章并未在共享原理上多花文

        字,主要是講述具體操作步驟,更有實(shí)際應(yīng)用意義。文章中也許還有遺漏及不夠細(xì)致之處,請大家共同討論,以對此過程更加明了。

        ——————————

        參考文獻(xiàn)

        [1]微軟MSDN文檔[DB/OL].http://www.microsoft.com/china / MSDN/library/WebServices/ASP.NET/HowtoShareSessionStateBetweenClassicASPandASP.NET.mspx?mfr=true.

        How to Share Session State Between ASP and ASP.NET

        Ma Wenjie1, 2LiNa1, 2Liu Qingtang2

        1. Engineering Research Center for Education Information Technology, HuaZhong Normal University, Wuhan Hubei., 430079

        2.Information Technology Department, HuaZhong Normal University,.Wuhan, Hubei 430079

        Abstract: The appearance of ASP.NET has improved the performance of compiling web site greatly, but simultaneously the traditional technology ASP is still in use, thus sharing Session state between the two technologies is a problem needing resolved. This article introduces the principle realized, presents material operations step by step on how to share Session state between ASP and ASP.NET in practical programs.

        Keywords: ASP, ASP.NET, Session State, Share

        注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。

        国产超碰人人模人人爽人人喊| 日本少妇熟女一区二区| 国产丝袜免费精品一区二区| 无码伊人久久大香线蕉| 日本免费看一区二区三区| 国产人妻高清国产拍精品| 亚洲综合区图片小说区| 国产精品无码无片在线观看3D | 国产精品久久久久av福利动漫| 免费黄色电影在线观看| 国产一区a| 亚洲中文字幕高清视频| 亚洲精品午夜久久久九九| 老子影院午夜伦不卡| 中文字幕乱码人妻一区二区三区 | 嗯啊好爽高潮了在线观看| 国产动作大片中文字幕| 思思久久96热在精品国产| 国产在线视频国产永久视频| 亚洲综合精品在线观看中文字幕| 亚洲一区二区刺激的视频| 真人做爰试看120秒| 毛片无码国产| 天堂一区人妻无码| 中文字幕日韩高清| 日韩av中文字幕亚洲天| 亚洲日本高清一区二区| 免费毛儿一区二区十八岁| 国内精品卡一卡二卡三| 亚洲国产欧美日韩一区二区| 亚洲AV无码一区二区一二区教师| 最新国内视频免费自拍一区| 国产免费观看久久黄av麻豆 | 国产精品久久久久国产a级| 国产精品99久久久精品免费观看| 蜜桃成人精品一区二区三区| 中文亚洲av片不卡在线观看| 亚洲欧美一区二区三区在线| 老熟女多次高潮露脸视频| 国产精品久久久久久久y| 日韩女同在线免费观看|