搜尋
首頁後端開發C#.Net教程詳解ASP中Session的使用技巧

寫過稍微大型一點 ASP 的人都知道,Session 這個物件真是好用,它可以用來記錄使用者私有的資料變量,既安全又方便。但你真的知道 Session 的運作原理嗎?

寫過稍微大型一點 ASP 的人都知道,Session 這個物件真是好用,它可以用來記錄使用者私有的資料變量,既安全又方便。但你真的知道 Session 的運作原理嗎?或許了解以後,你就再也不太敢使用這個令人又愛又恨的對象。雖然轉而替代之的方法稍嫌麻煩,但在長期考慮之下,也就不得不這麼做了

首先來講講Session 的好處,它可以用來記錄客戶端私有的資料變量,並且在時間範圍內不會消失。這真的是很重要的功能,尤其是有會員的系統必須要用到的。像是會員的登錄帳號、時間、狀態以及許許多多該記錄​​的即時資料﹝如購物系統記錄使用者的購物籃內的商品﹞,這些資訊屬於各使用者私人所需要,通常開發者都是使用Session 記錄處理。

  然而,在 ASP 中的 Session 是使用 Cookies 所構成,伺服器將所有的 Session 內記錄的資料,以 Cookies 的方式傳至使用者的瀏覽器。通常一般瀏覽器會將這些 Cookies 存起來,每當使用者點選連結,再次與伺服器做連線時,瀏覽器就會把這些 Cookies 傳回 Server 供處理。這就是Session 的運作原理,當資料量大一點時,由於必須傳出去又收回來,不但吃線路頻寬,效能相對降低,因為Server 必須花費更多的資源在做聯機處理和重新配置內存等初始動作。現在你可能會想『我必須用這功能,只好犧牲點了’,不過本文講Session 一方面是教導大家少用;另一方面當然是有替代辦法,緊接著上場的,就是同屬Global.asa 內的Application 物件。

  Application 也是記錄處理暫時資料的好手,各方面的能力和用法都和Session 一樣,只不過相較之下,它所記錄的資料是屬於公用的,也就是任何使用者都可以共享的變數空間。 Application 不像 Session ,不是將資料傳給使用者,等下一次聯機再讀取回來,它是直接記錄在 Server 上的內存,相對之下性能上快上 Session 許多。

  由於 Application 物件是公用的,首先必須做的,就是要把一塊公用的區域規劃給各個使用者,讓每個用戶擁有自己的區域可以記錄資料,以達到仿真 Session 的目的。現在有兩種做法:

  一、在Server 啟動時事先初始化建立及分配使用者記憶體空間,通常這種做法雖然一Server 開機就先佔了許多資源,但也省去了以後每當用戶聯機就必須做一次分配的麻煩。但有個限制,使用這種方法必須限制最大人數,由於是一激活就初始化,我們只能預估建立某數量的內存空間,所以這種方法通常用於聊天室這種小型的程序上。

  二、這種方法對於大型應用程式來說應該算較恰當的,採用動態的分配法,當使用者第一次聯機到 Server 上才開始分配資源給此使用者。這兩種模擬 Session 的方案,目的都是減輕 Session 資源的消耗,但畢竟還是無法完全替代,我們還是需要使用到一點點 Session,至少對 Server 已經能減輕不少負擔了。

  第一方案

  首先我們開始第一個方案的實作,由於是激活時初始化Application,我們當然要從Global.asa中著手:

  已經完成初始化了,但如何使用呢?我們只要在使用者登入的地方,把原本使用Session 儲存的資料,如帳號、登入時間,改成我們建立好的Application 物件中就可以了:

程式碼如下:

'
寻找未被使用的空间 
For
 i = 1 To Application("ClientMax") 
If
 Application("User_Status_" & i) = 0 Then 
'使用者暂时编号 
Session("Index") = i 
'锁定 
Application Application.Lock 
'设成已使用的状态 Application("User_Status_" & i) = 1 '放入变量数据 
Application("User_Ac
count
_" & i) = Account 
Application("User_Log
time
_" & i) = Now()
'解除锁定 
Application.Unlock 
Exit For 
End
 If 
Next


  要取得使用者的相關變數資料則就像下面的做法:

Response.Write(Application("User_Account_" & Session("Index"))

  你可能會發現,不是說不要使用Session 嗎?狀態的,讀取完頁面就斷線,那我們要怎麼知道下次聯機的還是同一個人呢?上變數空間的號碼,你可以想像成銀行裡有很多的保險箱,你擁有一支鑰匙,而鑰匙上有編號,鑰匙上的編號可以讓行員帶領你去你自己的保險箱。改進之處,但對小型的應用程式已經是很夠用了。來記錄,講到編號,Session 物件有提供一個『 SessionID 』方法。 SessionID 取得。個方案還是有它的用途在,像是會限制人數的聊天室等等小應用程序,接下來的第二替代方案,就是針對較大型的系統了。達數百數千甚至上萬人的網站,使用之前的方案,必定是行不通的。者,假若一個區域中有5 個變量,一個變量佔32 字節(Byte),10000 個就佔了320000 K(320MB) 以上,Server 一激活就塞了那麼多的垃圾到內存,效能勢必還沒上戰場就降低不少;而且別看這些數字很少,以為自己的512 MB 會夠用,上面的數字是假設一個最低數字,加上Server 在配置內存時會額外使用到多少資源不得而知,所以只會更多不會更低。內存。

  第二方案做起來是比較簡單,請把第一方案的東西全部丟掉,我們不需要動到Global.asa,只需要改使用者登錄的地方和其它有用到的地方:


 程式碼如下:

'锁定 ApplicationApplication.Lock '放入变量数据 
Application("User_Account_" & Session.SessionID) = Account 
Application("User_Logtime_" & Session.SessionID) = Now() '解除锁定Application.Unlock
  要取得使用者的相關變數資料則就像下面的做法:

程式碼如下:
Response.Write(Application("User_Account_" & Session.SessionID))

【相關推薦】

1. 

ASP免費影片教學

#2. 

ASP session簡單範例

3. 關於ASP中session的詳細介紹

4. 教你解決ASP session遺失的方法

5. 介紹ASP中Session物件的三種方法

以上是詳解ASP中Session的使用技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C#和.NET運行時:它們如何一起工作C#和.NET運行時:它們如何一起工作Apr 19, 2025 am 12:04 AM

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

C#.NET開發:入門的初學者指南C#.NET開發:入門的初學者指南Apr 18, 2025 am 12:17 AM

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

c#和.net:了解兩者之間的關係c#和.net:了解兩者之間的關係Apr 17, 2025 am 12:07 AM

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

c#.net的持續相關性:查看當前用法c#.net的持續相關性:查看當前用法Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

從網絡到桌面:C#.NET的多功能性從網絡到桌面:C#.NET的多功能性Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#.NET與未來:適應新技術C#.NET與未來:適應新技術Apr 14, 2025 am 12:06 AM

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.net適合您嗎?評估其適用性c#.net適合您嗎?評估其適用性Apr 13, 2025 am 12:03 AM

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

.NET中的C#代碼:探索編程過程.NET中的C#代碼:探索編程過程Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。