ASP.NET SESSION的使用及原理

來源:互聯網
上載者:User
導 讀:ASP.NET中,SESSION不需要cookie就可以工作。
這篇文章介紹了它的機制,弄明白這一原理,對SESSION的使用將有很大協助。 
--------------------------------------------------------------------------------
session 的 管理,我們傳統的asp 程式其實是一種 dead 的session 連接,系統其實在我們的用戶端書寫了一個Cookie,當我們把我們瀏覽器的 安全設定中的 Cookie 設定成 Prompt 的時候,當我們訪問一個有Session 的頁面的時候,就會出現一個是否允許Cookie 的提示,當設定成為 不允許 Cookie 的時候,我們的Session 總是不能成功.例如:

<%
Session("username")="範維肖"
Session("URL")=http://www.onlyvc.org
%>

在ASp.Net 的環境中,Session 被完全的重新進行了定義,由於豆腐現在的ASp.Net 的環境是PDC 版本的,所以,沒有對Beta1 版本進行Demo,我在這裡如果涉及到 Beta1 的內容,都是僅僅是材料上介紹的,沒有經過豆腐的測試

其實,對於一些不願意深究的同志們,豆腐 說:其實 asp.net 的使用方法和asp 的使用方法完全相同,甚至更為簡單,因為 根據豆腐 的觀察,我們根本不用繼續 去考慮 用戶端 的 cookie 選項 的狀態,因為不管用戶端的設定如何,session都可以順利的傳遞

下面我們就對 asp.net 的 session 機制進行一些簡單的深入瞭解,限於技術,我有的問題也不是很清楚,所以歡迎大家一同來探討 這個 文章

在PDC 版本中,我們開啟 %systemroot%\complus\(version)\config.web 檔案,我們找到 sessionstate可以看到以前的內容:

<sessionstate 
inproc="true" 
usesqlserver="false" 
cookieless="false" 
timeout="20" 
server="localhost" 
port="42424" 
/>

當 inproc 為True 的時候,asp.net 將採取一種稱為 in-process 的機制,將Session 的資料儲存在這一台伺服器上,如果inproc 和 usesqlserver 同時為 false ,則採取一種 out process 的機制,將session 儲存在 一台 專門用來儲存session 的伺服器上,這樣就可以解決當訪問 一個網站的 不同主機的時候,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">
-->
關於 config.web 檔案的session 部分我們就先說到這裡,下面我們來看看 cookieless 的問題:
這個Cookieless 不是我們平常理解的是否在 用戶端 儲存Cookie 根據豆腐的觀察,ASP.net 的session
是不會在 瀏覽器用戶端產生任何的cookie的
我們首先把 cookieless 設定成為 false 的時候,我們來看看這個程式
<%@ Page Language="VB" %>
<%Session("name")="範維肖"%>
<%=Session("name")%>
程式執行結束後,我們沒有從瀏覽器得到任何的 提示,雖然我們也使用到了Session
當我們 把 cookieless 設定成為 true 以後,再次運行這個程式,我們發現 程式仍然是
正確的執行,但是瀏覽器的地址欄發生了一些變化,我們以前是
http://host/testsession.aspx 現在變成了 http://host/(包含有很多字串的內容)/testsession.aspx豆腐估計這是 因為 這個session 甚至在 伺服器上也沒有 產生Cookie 的原因,只好用 (包含有很多字串的內容)的內容來儲存Session的內容了

當我們將 inproc 和 usesqlserver 都設定成為 false 表示我們將使用 out process 這個時候,我們就要指定server 的name 這個server 就是同意儲存 session 的 伺服器,我們需要在這個 伺服器上 將asp state 的服務啟動

當我們需要使用 sql server 的時候,我們必須填寫 sql server 的連接字串,這樣 session 就會被儲存到sql server 的一個database ,當然這個database 是要產生的,,不過在 PDC 版本中,我沒有找到這個database 的安裝檔案
所以,關於 sql server 的這個部分 我就 無能為力了,都怪 豆腐 沒有挺 開心 的話,安裝了個 PDC 的版本,現在想起來 後悔呀:(

通過這些的學習,我們是否對asp.net 的session 機制有了進一步的瞭解了呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.