ASP Session的功能的缺陷以及解決方案


http://www.cnblogs.com/jhy55/p/3376925.html

 

目前ASP的開發人員都正在使用Session這一強大的功能,但是在他們使用的過程中卻發現了ASP Session有以下缺陷:

  • 進程依賴性:ASP Session狀態存於IIS的進程中,也就是inetinfo.exe這個程序。所以當inetinfo.exe進程崩潰時,這些信息也就丟失。另外,重起或者關閉IIS服務都會造成信息的丟失。
  • Session狀態使用范圍的局限性:剛一個用戶從一個網站訪問到另外一個網站時,這些Session信息並不會隨之遷移過去。例如:facebook網站的WWW服務器可能不止一個,一個用戶登錄之后要去各個頻道瀏覽,但是每個頻道都在不同的服務器上,如果想在這些WWW服務器共享Session信息怎么辦呢?
  • Cookie的依賴性:實際上客戶端的Session信息是存儲與Cookie中的,如果客戶端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。

鑒於ASP Session的以上缺陷,微軟的設計者們在設計開發 ASP.NET Session時進行了相應的改進,完全克服了以上缺陷,使得ASP.NET Session成為了一個更加強大的功能。

 

一,Session 描述(解決方案):

在用戶發出首個請求時創建直到用戶結束回話

1、  SessionStateModule負責產生session

2、  HttpApplication在請求的處理管道中會檢查當前的請求是否實現了System.Web.SessionState. IRequiresSessionState 接口,如果實現了則為當前的請求分配一個session

3、  Web.config中配置 <sessionState cookieless=”true“> 則會在URL將當前sessionid帶上

4、  Session保存的位置:

  <sessionState mode="InProc | StateServer| SQLServer">
<sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer"/>

創建數據庫腳本文件在

C:\Windows\Microsoft.NET\Framework\v4.0.30319(v4.0.30319 根據你的 Framework 版本 )

下的:

InstallPersistSqlState.sql 和 InstallSqlState.sql

可以用下面命令在 VS2012 開發人員命令提示 保存Session的數據庫  

aspnet_regsql -U sa -P 123–ssadd -sstype c -d aspnetdb (:123 是數據庫密碼)

web.config可以配置成:

<sessionState  sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true"  mode="SQLServer"/>

   執行之后再數據庫會有以下類似的數據庫

二,將服務器Session信息存儲在進程外

首先,讓我們來打開管理工具->服務,找到名為:ASP.NET State Service的服務,啟動它。實際上,這個服務就是啟動一個要保存Session信息的進程。啟動這個服務后,你可以從Windows任務管理器->進程中看到一個名為aspnet_state.exe的進程,這個就是我們保存Session信息的進程。

然后,回到Web.config文件中上述的段落中,將mode的值必須有為StateServer 的值。保存文件后的重新打開一個IE,打開SessionState.aspx頁面,保存一些信息到Session中。這時,讓我們重起IIS,再回到SessionState.aspx頁面中查看剛才的Session信息,發現沒有丟失。

實際上,這種將Session信息存儲在進程外的方式不光指可以將信息存儲在本機的進程外,還可以將Session信息存儲在其他的服務器的進程中。這時,不光需要將mode的值改為StateServer,還需要在stateConnectionString中配置相應的參數。例如你的計算你是192.168.0.1,你想把Session存儲在IP為192.168.0.2的計算機的進程中,就需要設置成這樣:stateConnectionString="tcpip=192.168.0.2:42424"。當然,不要忘記在192.168.0.2的計算機中裝上.NET Framework,並且啟動ASP.NET State Services服務。

 ===============================個人理解

兩種方式  使用 狀態服務器  在計算機管理的服務中有一個叫  ASP.net 狀態服務器
 
使用方式配置文件中配置
 
   <!--/配置網站的session存儲模式-->
    <!--<sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer">
    </sessionState>-->
 
 
 第二種方式是  使用數據庫存session
    可以用下面命令安裝保存Session的數據庫 aspnet_regsql -U sa -P master –ssadd -sstype c -d aspnetdb     
這是 framework 安裝路徑下的 aspnet_regsql.exe 加上/?可以查看參數的說明。
 
web.config可以配置成: <sessionState sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true" mode="SQLServer"/>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM