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


















