ASP.NET Session使用淺析
在開始ASP.NET Session使用講解之前,我們首先來看看有關(guān)ASP.NET Session的一些小的概念:
Session 的管理,我們傳統(tǒng)的asp 程序其實是一種 dead 的Session 聯(lián)結(jié),系統(tǒng)其實在我們的客戶端書寫了一個Cookie,當我們把我們?yōu)g覽器的 安全設(shè)置中的 Cookie 設(shè)置成 Prompt 的時候,當我們訪問一個有Session 的頁面的時候,就會出現(xiàn)一個是否允許Cookie 的提示,當設(shè)置成為 不允許 Cookie 的時候,我們的Session 總是不能成功.例如:
- ﹤%
- Session("username")="豆腐"
- Session("URL")="http://www.asp888.net"
- %﹥
在ASP.NET 的環(huán)境中,ASP.NET Session使用的情況是被完全的重新進行了定義,由于豆腐現(xiàn)在的ASP.NET 的環(huán)境是PDC 版本的,所以,沒有對Beta1 版本進行Demo,我在這里如果涉及到 Beta1 的內(nèi)容,都是僅僅是材料上介紹的,沒有經(jīng)過豆腐的測試
其實,對于一些不愿意深究的同志們,豆腐 說:其實 ASP.NET Session使用方法和ASP Session使用的使用方法完全相同,甚至更為簡單,因為 根據(jù)豆腐 的觀察,我們根本不用繼續(xù) 去考慮 客戶端 的cookie 選項 的狀態(tài),因為不管客戶端的設(shè)置如何,Session都可以順利的傳遞
下面我們就對ASP.NET Session使用機制進行一些簡單的深入了解,限于技術(shù),我有的問題也不是很清楚,所以歡迎大家一同來探討 這個 文章
在PDC 版本中,我們打開 %systemroot%\complus\(version)\config.web 文件,我們找到 Sessionstate可以看到以前的內(nèi)容:
- ﹤Sessionstate
- inproc="true"
- usesqlserver="false"
- cookieless="false"
- timeout="20"
- server="localhost"
- port="42424"
- /﹥
當 inproc 為True 的時候,ASP.NET 將采取一種稱為 in-process 的機制,將Session 的數(shù)據(jù)保存在這一臺服務(wù)器上,如果inproc 和usesqlserver 同時為 false ,則采取一種 out process 的機制,將Session 存儲在 一臺 專門用來保存Session 的服務(wù)器上,這樣就可以解決當訪問 一個站點的 不同主機的時候,Session 的共享,這個以前在ASP中絕對是不可能的.在 Beta1 的版本上 config.web 改變了很多,我們簡單的看一下:
- ﹤!-- Sessionstate attributes:
- mode = "inproc" | "sqlserver" | "stateserver"
- cookieless = "true" | "false"
- timeout = ﹤Session timeout in minutes, a whole number greater than 0﹥
- sqlconnectionstring = ﹤acceptable values for SQLConnection.ConnectionString,
- only used when mode="sqlserver"﹥
- server = ﹤server name, only used when mode="stateserver"﹥
- port = ﹤port number, only used when mode="stateserver"﹥
- --﹥
關(guān)于 config.web 文件的Session 部分我們就先說到這里,下面我們來看看 cookieless 的問題:
這個Cookieless 不是我們平常理解的是否在 客戶端 保存Cookie 根據(jù)豆腐的觀察,ASP.NET的Session
是不會在 瀏覽器客戶端生成任何的cookie的
我們首先把 cookieless 設(shè)置成為 false 的時候,我們來看看這個程序
- ﹤%@ Page Language="VB" %﹥
- ﹤%Session("name")="豆腐"%﹥
- ﹤%=Session("name")%﹥
程序執(zhí)行結(jié)束后,我們沒有從瀏覽器得到任何的 提示,雖然我們也使用到了Session當我們 把 cookieless 設(shè)置成為 true 以后,再次運行這個程序,我們發(fā)現(xiàn) 程序仍然是正確的執(zhí)行,但是瀏覽器的地址欄發(fā)生了一些變化,我們以前是
http://host/testSession.aspx 現(xiàn)在變成了 http://host/(包含有很多字符串的內(nèi)容)/testSession.aspx豆腐估計這是 因為 這個Session 甚至在 服務(wù)器上也沒有 生成Cookie 的原因,只好用 (包含有很多字符串的內(nèi)容)的內(nèi)容來保存Session的內(nèi)容了
當我們將inproc 和 usesqlserver 都設(shè)置成為 false 表示我們將使用 out process 這個時候,我們就要指定server 的name 這個server 就是同意保存 Session 的 服務(wù)器,我們需要在這個服務(wù)器上將asp state 的服務(wù)啟動
當我們需要使用 sql server 的時候,我們必須填寫 sql server的連接字符串,這樣 Session 就會被保存到sql server 的一個database ,當然這個database 是要生成的,,不過在PDC版本中,我沒有找到這個database 的安裝文件。
ASP.NET Session使用的相關(guān)情況就向你介紹到這里,希望對你了解ASP.NET Session使用有所幫助。
【編輯推薦】