如何实现Asp与Asp.Net共享Session
生活随笔
收集整理的這篇文章主要介紹了
如何实现Asp与Asp.Net共享Session
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在.net中,Session的存儲(chǔ)機(jī)制已經(jīng)與Asp的存儲(chǔ)機(jī)制不一樣,雖然可以在同一個(gè)IIS下同時(shí)運(yùn)行asp與aspx,但是它們之間不能傳遞Session。
??之前大批系統(tǒng)應(yīng)用到了asp,在升級(jí)過(guò)程中,如果完全拋棄asp來(lái)重寫(xiě),一來(lái)工作量太大,二來(lái)以前的成果不能保存下來(lái)。
??所以微軟提出了一個(gè)Session共享的解決方案,只是此文檔光說(shuō)明原理,并沒(méi)有說(shuō)具體的操作步驟,由此,我撰文描述過(guò)程。
??
??簡(jiǎn)單說(shuō)明原理,asp與asp.net之間的Session統(tǒng)一存儲(chǔ)在數(shù)據(jù)庫(kù)中來(lái)實(shí)現(xiàn)共享
??
??1、創(chuàng)建數(shù)據(jù)表
??打開(kāi)SQL Server查詢分析器,運(yùn)行以下腳本來(lái)創(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)根目錄下,并打開(kāi)文件,修改Application("SessionDSN") 為合適的數(shù)據(jù)庫(kù)鏈接字符串,如果系統(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ù)庫(kù)鏈接。
??將另外兩個(gè)dll文件復(fù)制到系統(tǒng)目錄下(或其他合適目錄)
??
??3、關(guān)閉IIS中Asp的Session選項(xiàng)
??打開(kāi)IIS,選擇站點(diǎn),依次選擇屬性 -> 主目錄 -> 配置 -> 應(yīng)用程序選項(xiàng),將啟用會(huì)話狀況前的復(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í)行失敗,請(qǐng)將這兩個(gè)文件的路徑都寫(xiě)全了)
??
??5、注冊(cè)SessionUtility.dll為Com對(duì)象
??同樣,要找到 regasm.exe 文件,一般情況下在 WINNT\Microsoft.NET\Framework\v1.1.4322 目錄下
??在命令提示符窗口中,執(zhí)行 regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb,(如果執(zhí)行失敗,請(qǐng)將這兩個(gè)文件的路徑都寫(xiě)全了)
??這樣就會(huì)產(chǎn)生出一個(gè)tlb文件,可當(dāng)做普通的Com組件來(lái)調(diào)用。
??
??6、注冊(cè)SessionManager.dll
??這個(gè)很簡(jiǎn)單了,在命令提示符窗口中,執(zhí)行regsvr32 SessionManager.dll
??
??7、如果是NTFS格式的系統(tǒng),請(qǐng)找到 SessionMgr.dll,右鍵點(diǎn)擊,屬性,將IUSR_<machine_name>權(quán)限設(shè)置為可讀和可執(zhí)行。
??
??至此,我們已經(jīng)可以實(shí)現(xiàn)了Asp與Asp.net之間Session共享了,那么怎么去用
??
??在Asp中,我們要如下使用:
??頁(yè)面開(kāi)始端
??Dim Session
??Set Session = Server.createObject("SessionMgr.Session2")
??Session("UserID") = ...
??...
??...
??...
??頁(yè)面結(jié)束端
??Set Session = Nothing '記得一定要釋放哦
??
??而在Asp.net中,我們要如下使用:
??首先,我們要添加對(duì)SessionUtility的引用
??然后,編碼時(shí),原來(lái)是這樣的繼承 public class WebForm1 : System.Web.UI.Page,修改為public class WebForm1 : MSDN.SessionPage
??這樣在編碼過(guò)程中就可以使用Session("UserID")這樣的形式了。
??
??注意:雖然Session實(shí)現(xiàn)了共享,但是Session的使用語(yǔ)法,相對(duì)于.net中新增的部分,就沒(méi)有實(shí)現(xiàn),畢竟要照顧asp
??譬如Session.Remove,就不能用了
??之前大批系統(tǒng)應(yīng)用到了asp,在升級(jí)過(guò)程中,如果完全拋棄asp來(lái)重寫(xiě),一來(lái)工作量太大,二來(lái)以前的成果不能保存下來(lái)。
??所以微軟提出了一個(gè)Session共享的解決方案,只是此文檔光說(shuō)明原理,并沒(méi)有說(shuō)具體的操作步驟,由此,我撰文描述過(guò)程。
??
??簡(jiǎn)單說(shuō)明原理,asp與asp.net之間的Session統(tǒng)一存儲(chǔ)在數(shù)據(jù)庫(kù)中來(lái)實(shí)現(xiàn)共享
??
??1、創(chuàng)建數(shù)據(jù)表
??打開(kāi)SQL Server查詢分析器,運(yùn)行以下腳本來(lái)創(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)根目錄下,并打開(kāi)文件,修改Application("SessionDSN") 為合適的數(shù)據(jù)庫(kù)鏈接字符串,如果系統(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ù)庫(kù)鏈接。
??將另外兩個(gè)dll文件復(fù)制到系統(tǒng)目錄下(或其他合適目錄)
??
??3、關(guān)閉IIS中Asp的Session選項(xiàng)
??打開(kāi)IIS,選擇站點(diǎn),依次選擇屬性 -> 主目錄 -> 配置 -> 應(yīng)用程序選項(xiàng),將啟用會(huì)話狀況前的復(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í)行失敗,請(qǐng)將這兩個(gè)文件的路徑都寫(xiě)全了)
??
??5、注冊(cè)SessionUtility.dll為Com對(duì)象
??同樣,要找到 regasm.exe 文件,一般情況下在 WINNT\Microsoft.NET\Framework\v1.1.4322 目錄下
??在命令提示符窗口中,執(zhí)行 regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb,(如果執(zhí)行失敗,請(qǐng)將這兩個(gè)文件的路徑都寫(xiě)全了)
??這樣就會(huì)產(chǎn)生出一個(gè)tlb文件,可當(dāng)做普通的Com組件來(lái)調(diào)用。
??
??6、注冊(cè)SessionManager.dll
??這個(gè)很簡(jiǎn)單了,在命令提示符窗口中,執(zhí)行regsvr32 SessionManager.dll
??
??7、如果是NTFS格式的系統(tǒng),請(qǐng)找到 SessionMgr.dll,右鍵點(diǎn)擊,屬性,將IUSR_<machine_name>權(quán)限設(shè)置為可讀和可執(zhí)行。
??
??至此,我們已經(jīng)可以實(shí)現(xiàn)了Asp與Asp.net之間Session共享了,那么怎么去用
??
??在Asp中,我們要如下使用:
??頁(yè)面開(kāi)始端
??Dim Session
??Set Session = Server.createObject("SessionMgr.Session2")
??Session("UserID") = ...
??...
??...
??...
??頁(yè)面結(jié)束端
??Set Session = Nothing '記得一定要釋放哦
??
??而在Asp.net中,我們要如下使用:
??首先,我們要添加對(duì)SessionUtility的引用
??然后,編碼時(shí),原來(lái)是這樣的繼承 public class WebForm1 : System.Web.UI.Page,修改為public class WebForm1 : MSDN.SessionPage
??這樣在編碼過(guò)程中就可以使用Session("UserID")這樣的形式了。
??
??注意:雖然Session實(shí)現(xiàn)了共享,但是Session的使用語(yǔ)法,相對(duì)于.net中新增的部分,就沒(méi)有實(shí)現(xiàn),畢竟要照顧asp
??譬如Session.Remove,就不能用了
轉(zhuǎn)載于:https://www.cnblogs.com/hzuIT/articles/758512.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的如何实现Asp与Asp.Net共享Session的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个毫秒级计时的类
- 下一篇: 用ASP.NET AJAX 开发Web程