如何?Asp與Asp.Net共用Session

來源:互聯網
上載者:User
asp.net|session 微軟.net中,Session的儲存機制已經與Asp的儲存機制不一樣,雖然可以在同一個IIS下同時運行asp與aspx,但是它們之間不能傳遞Session。
之前大批系統應用到了asp,在升級過程中,如果完全拋棄asp來重寫,一來工作量太大,二來以前的成果不能儲存下來。

所以微軟提出了一個Session共用的解決方案,只是此文檔光說明原理,並沒有說具體的操作步驟,由此,我撰文描述過程。

簡單說明原理,asp與asp.net之間的Session統一儲存在資料庫中來實現共用

1、建立資料表
開啟SQL Server查詢分析器,運行以下指令碼來建立資料表,資料表名為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

將檔案解壓後,將產生4個檔案,分別作如下操作。
複製 global.asa 到系統根目錄下,並開啟檔案,修改Application("SessionDSN") 為合適的資料庫連結字串,如果系統本身已經有了global.asa,則在此檔案中添加如下Application:
Application("SessionDSN") = "initial catalog=SqlServerName;persist security info=False;user id=sa;password=****;packet size=4096"
在系統的 Web.config 檔案中,添加此項
<add key="SessionDSN" value="data source=SqlServerName;initial catalog=SessionDemoDb;persist security info=False;user id=SessionDemoDbUser;password=****;packet size=4096" />
並將其值修改為合適的資料庫連結。
將另外兩個dll檔案複製到系統目錄下(或其他合適目錄)

3、關閉IIS中Asp的Session選項
開啟IIS,選擇網站,依次選擇屬性 -> 主目錄 -> 配置 -> 應用程式選項,將啟用會話狀況前的複選勾去除。如下圖:
screen.width-350)this.width=screen.width-350" border=0>

4、安裝SessionUtility.dll
首先找到 gacutil.exe 檔,一般情況下在 Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin 目錄下
在命令提示字元視窗中,執行 gacutil /i SessionUtility.dll,(如果執行失敗,請將這兩個檔案的路徑都寫全了)

5、註冊SessionUtility.dll為Com對象
同樣,要找到 regasm.exe 檔,一般情況下在 WINNT\Microsoft.NET\Framework\v1.1.4322 目錄下
在命令提示字元視窗中,執行 regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb,(如果執行失敗,請將這兩個檔案的路徑都寫全了)
這樣就會產生出一個tlb檔案,可當做普通的Com組件來調用。

6、註冊SessionManager.dll
這個很簡單了,在命令提示字元視窗中,執行regsvr32 SessionManager.dll

7、如果是NTFS格式的系統,請找到 SessionMgr.dll,右鍵點擊,屬性,將IUSR_<machine_name>使用權限設定為可讀和可執行。

至此,我們已經可以實現了Asp與Asp.net之間Session共用了,那麼怎麼去用

在Asp中,我們要如下使用:
頁面開始端
Dim Session
Set Session = Server.createObject("SessionMgr.Session2")
Session("UserID") = ...
...
...
...
頁面結束端
Set Session = Nothing '記得一定要釋放哦

而在Asp.net中,我們要如下使用:
首先,我們要添加對SessionUtility的引用
然後,編碼時,原來是這樣的繼承 public class WebForm1 : System.Web.UI.Page,修改為public class WebForm1 : MSDN.SessionPage
這樣在編碼過程中就可以使用Session("UserID")這樣的形式了。

注意:雖然Session實現了共用,但是Session的使用文法,相對於.net中新增的部分,就沒有實現,畢竟要照顧asp
譬如Session.Remove,就不能用了。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.