如何實(shí)現(xiàn)Asp與Asp.Net共享Session_ASP教程
推薦:ASP.NET2.0的控件狀態(tài)和視圖狀態(tài)探討基本概念 控件狀態(tài)-為了讓控件正常工作,有時(shí)需要存儲控件狀態(tài)數(shù)據(jù)。例如,如果編寫了一個(gè)自定義控件,其中具有顯示不同信息的不同選項(xiàng)卡,為使該控件如預(yù)期一樣工作,控件需要知道在往返過
在.net中,Session的存儲機(jī)制已經(jīng)與Asp的存儲機(jī)制不一樣,雖然可以在同一個(gè)IIS下同時(shí)運(yùn)行asp與aspx,但是它們之間不能傳遞Session。之前大批系統(tǒng)應(yīng)用到了asp,在升級過程中,如果完全拋棄asp來重寫,一來工作量太大,二來以前的成果不能保存下來。所以微軟提出了一個(gè)Session共享的解決方案,只是此文檔光說明原理,并沒有說具體的操作步驟,由此,我撰文描述過程。
簡單說明原理,asp與asp.net之間的Session統(tǒng)一存儲在數(shù)據(jù)庫中來實(shí)現(xiàn)共享
1、創(chuàng)建數(shù)據(jù)表
打開SQL Server查詢分析器,運(yùn)行以下腳本來創(chuàng)建數(shù)據(jù)表,數(shù)據(jù)表名為SessionState
if exists (select * from sysobjects where id = object_id(N'[dbo].[SessionState]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[SessionState]
GO
create TABLE [dbo].[SessionState] (
[ID] uniqueidentifier NOT NULL ,
[Data] [image] NOT NULL ,
[Last_Accessed] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
alter TABLE [dbo].[SessionState] WITH NOCHECK ADD
CONSTRAINT [PK_SessionState] PRIMARY KEY NONCLUSTERED
(
[ID]
) ON [PRIMARY]
GO
2、下載以下文件 Session.rar
將文件解壓后,將產(chǎn)生4個(gè)文件,分別作如下操作。
復(fù)制 global.asa 到系統(tǒng)根目錄下,并打開文件,修改Application("SessionDSN") 為合適的數(shù)據(jù)庫鏈接字符串,如果系統(tǒng)本身已經(jīng)有了global.asa,則在此文件中添加如下Application:
Application("SessionDSN") = "initial catalog=SqlServerName;persist security info=False;user id=sa;password=****;packet size=4096"
在系統(tǒng)的 Web.config 文件中,添加此項(xiàng)
<add key="SessionDSN" value="data source=SqlServerName;initial catalog=SessionDemoDb;persist security info=False;user id=SessionDemoDbUser;password=****;packet size=4096" />
并將其值修改為合適的數(shù)據(jù)庫鏈接。
將另外兩個(gè)dll文件復(fù)制到系統(tǒng)目錄下(或其他合適目錄)
3、關(guān)閉IIS中Asp的Session選項(xiàng)
打開IIS,選擇站點(diǎn),依次選擇屬性 -> 主目錄 -> 配置 -> 應(yīng)用程序選項(xiàng),將啟用會話狀況前的復(fù)選勾去除。如下圖:
screen.width-350)this.width=screen.width-350" border=0>
4、安裝SessionUtility.dll
首先找到 gacutil.exe 文件,一般情況下在 Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin 目錄下,在命令提示符窗口中,執(zhí)行 gacutil /i SessionUtility.dll,(如果執(zhí)行失敗,請將這兩個(gè)文件的路徑都寫全了)
5、注冊SessionUtility.dll為Com對象
同樣,要找到 regasm.exe 文件,一般情況下在 WINNT\Microsoft.NET\Framework\v1.1.4322 目錄下
在命令提示符窗口中,執(zhí)行 regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb,(如果執(zhí)行失敗,請將這兩個(gè)文件的路徑都寫全了)
這樣就會產(chǎn)生出一個(gè)tlb文件,可當(dāng)做普通的Com組件來調(diào)用。
6、注冊SessionManager.dll
這個(gè)很簡單了,在命令提示符窗口中,執(zhí)行regsvr32 SessionManager.dll
7、如果是NTFS格式的系統(tǒng),請找到 SessionMgr.dll,右鍵點(diǎn)擊,屬性,將IUSR_<machine_name>權(quán)限設(shè)置為可讀和可執(zhí)行。
至此,我們已經(jīng)可以實(shí)現(xiàn)了Asp與Asp.net之間Session共享了,那么怎么去用
在Asp中,我們要如下使用:
頁面開始端
Dim Session
Set Session = Server.createObject("SessionMgr.Session2")
Session("UserID") = ...
...
...
...
頁面結(jié)束端
Set Session = Nothing '記得一定要釋放哦
而在Asp.net中,我們要如下使用:
首先,我們要添加對SessionUtility的引用
然后,編碼時(shí),原來是這樣的繼承 public class WebForm1 : System.Web.UI.Page,修改為public class WebForm1 : MSDN.SessionPage
這樣在編碼過程中就可以使用Session("UserID")這樣的形式了。
注意:雖然Session實(shí)現(xiàn)了共享,但是Session的使用語法,相對于.net中新增的部分,就沒有實(shí)現(xiàn),畢竟要照顧asp
譬如Session.Remove,就不能用了。
分享:用ASP程序?qū)崿F(xiàn)網(wǎng)站在線人數(shù)統(tǒng)計(jì)在瀏覽網(wǎng)頁的時(shí)侯,常常可以看見一些“當(dāng)前網(wǎng)站上的人數(shù)是XXX人”的在線人數(shù)同計(jì)。如何用ASP來做一個(gè)呢?首先,分析一下它的做法,一般來說,這些線上人數(shù)統(tǒng)計(jì)都是指一個(gè)時(shí)段內(nèi)的
- asp FSO 讀寫文件本文件實(shí)現(xiàn)代碼
- asp中isNull、isEmpty和空字符串的區(qū)別
- asp獲取用戶真實(shí)IP地址的方法
- asp連接sqlserver數(shù)據(jù)庫實(shí)現(xiàn)代碼
- asp中正則表達(dá)式過濾html代碼函數(shù)
- asp中g(shù)et post提交表單區(qū)別
- 網(wǎng)頁模板:ASP內(nèi)建對象Request
- xmlhttp的open方法使用詳解
- ASP的常用的自定義函數(shù)大全
- asp中用for循環(huán)的一個(gè)小技巧
- eWebEditor v3.8 列目錄
- ASP無組件分頁實(shí)現(xiàn)思路及代碼
- 相關(guān)鏈接:
- 教程說明:
ASP教程-如何實(shí)現(xiàn)Asp與Asp.Net共享Session
。