?? page12.htm
字號:
<p>應用程序的會話狀態被禁用。 </p>
<p>ASP 頁被定義為無會話,即該頁包含 <%@ EnableSessionState=False %>
標記。詳細信息,請參閱 無會話的 ASP 頁。 </p>
<p>請注意,SessionID cookie 并不提供跟蹤用戶對某個 Web
站點的多次訪問的永久方法。存儲在服務器內存中的 SessionID
信息很容易丟失。如果想跟蹤在很長時間內訪問您的 Web
應用程序的用戶,必須通過在用戶的 Web 瀏覽器中存儲一個專門的
cookie,并將 cookie
信息保存到數據庫中來創建一個用戶標識。詳細信息,請參閱 使用
Cookie。</p>
<p>在 Session 對象中存儲數據</p>
<p>Session
對象提供了一個可在其中存儲信息的動態關聯數組。您可以在 Session
對象中存儲數值變量和對象變量。</p>
<p>通過對 Session 對象中的命名項賦值,可將變量存儲在 Session
對象中。例如,以下命令將兩個新變量存儲在 Session 對象中:</p>
<p><% </p>
<p>Session("FirstName") = "Jeff"</p>
<p>Session("LastName") = "Smith" </p>
<p>%></p>
<p>通過訪問該命名項可從 Session 對象中獲取信息。例如,顯示
Session("FirstName") 的當前值:</p>
<p>Welcome <%= Session("FirstName") %></p>
<p>可以在 Session
對象中存儲用戶的首選項,然后通過訪問首選項來決定將哪一頁發送給用戶。例如,可以允許用戶在您的應用程序的第一頁中指定純文本版本的內容并將這一選擇應用到用戶此后對該應用程序的所有頁的訪問上。</p>
<p><% If Session("ScreenResolution") = "Low" Then %> </p>
<p>This is the text version of the page.</p>
<p><% Else %> </p>
<p>This is the multimedia version of the page.</p>
<p><% End If %> </p>
<p>您也可以在 Session
對象中存儲一個對象實例,但這樣做會影響服務器的性能。詳細信息,請參閱
設置對象作用域。</p>
<p><strong>管理 Web Farm 的會話</strong></p>
<p>ASP 會話信息存儲在 Web 服務器中。瀏覽器必須向 Web
服務器請求頁才能獲得用來訪問會話信息的腳本。在 Web Farm(其中許多
Web
服務器共同承擔響應用戶申請的責任)中,用戶的請求并不總是被路由到同一個服務器,而是由一個被稱為負載平衡進程的特殊軟件對此
URL 站點的申請分配任意一個空閑的服務器。負載平衡進程使在 Web
Farm 中保存會話信息變得更加困難。</p>
<p>為了在一個負載被平衡的站點上使用 ASP
會話管理,必須保證用戶會話的所有請求都被定向到同一個 Web
服務器。一種做法是編寫一個 Session_OnStart 過程,此過程使用 Response
對象將瀏覽器重定向到運行該用戶會話的 Web
服務器。如果在您的應用程序頁中的所有鏈接都是相對的,那么以后對某一頁的所有請求都將被路由到同一個服務器。</p>
<p>例如,某用戶要通過請求某一站點的通用 URL:http://www.microsoft.com
來訪問一個應用程序。負載平衡進程將申請路由到服務器
server3.microsoft.com。ASP 在此服務器上生成了一個新的用戶會話。在
Session_OnStart 過程中,瀏覽器被重定向給指定的服務器:</p>
<p><% Response.Redirect("http://server3.microsoft.com/webapps/firstpage.asp")
%></p>
<p>瀏覽器將請求指定的頁,并且以后的所有請求都將被路由到同一個服務器。</p>
<p><strong>使用 Cookie</strong></p>
<p>cookie 是 Web 服務器嵌在用戶的 Web
瀏覽器中,用來代表用戶的令牌。當下次同一瀏覽器請求一頁時,它將發送從
Web 服務器收到的 cookie。 cookie 允許有一組信息與用戶關聯。 ASP
腳本使用 Response 和 Request 對象的 Cookies 集合,可以獲取和設置 cookie
的值。 </p>
<p><strong>設置 cookie</strong></p>
<p>要設置 cookie 的值,可使用 Response.Cookies。如果 cookie 不存在,Response.Cookies
將創建新的 cookie。例如,要向瀏覽器發送一個有關聯值
("Mars") 的 cookie 名 ("planet"),可使用下列命令,這些命令必須出現在您的
Web 頁的 <HTML> 標記前:</p>
<p><% Response.Cookies("planet")="Mars" %></p>
<p>如果您只希望 cookie
在當前的用戶會話中被使用,則只需向瀏覽器發送 cookie。但是,如果要在用戶已經終止或重新啟動瀏覽器之后確認用戶,就必須強制瀏覽器將
cookie 存儲在計算機的硬盤上。要保存 cookie,可使用 Response.Cookies 的
Expires 屬性并將日期設置為此后的某一天:</p>
<p><%</p>
<p>Response.Cookies("planet") = "Mars" </p>
<p>Response.Cookies("planet").Expires = "January 1, 1999" </p>
<p>%></p>
<p>cookie 可有多個值;這樣的 cookie 被稱為一個 帶索引的 cookie。每個
cookie 值都被賦予一個關鍵字;您可以設置一個特定的 cookie
關鍵字的值。例如:</p>
<p><% Response.Cookies("planet")("Mars")="SpaceMissions"
%> </p>
<p>如果某個現有的 cookie 具有關鍵字值但 Response.Cookies
未指明一個關鍵字的名稱,則該關鍵字值將被刪除。類似的,如果某個現有的
cookie 沒有關鍵字值但 Response.Cookies
指明了關鍵字的名稱和值,則現有的 cookie 值將被刪除,并生成新的
key-value 對。</p>
<p><strong>獲取 cookie</strong></p>
<p>要獲取 cookie 的值,可使用 Request.Cookies 集合。例如,如果用戶的
HTTP 請求設置了 planet=Mars,則下列語句將獲取值 Mars:</p>
<p><%= Request.Cookies("planet") %></p>
<p>相似的,要從帶索引的 cookie
中獲取關鍵字值,可使用關鍵字名。例如,如果用戶發出下列的 HTTP
請求:</p>
<p>planet=Mars&Mars=SpaceMissions</p>
<p>下列腳本將返回值 SpaceMissions:</p>
<p><%= Request.Cookies("planet")("Mars") %></p>
<p><strong>設置 cookie 路徑</strong></p>
<p>由 ASP 存儲在用戶的 Web 瀏覽器中的每個 cookie
都包含路徑信息。當瀏覽器請求的文件的位置與在 cookie
中指定的路徑相同時,瀏覽器自動將 cookie
轉發給服務器。默認情況下,cookie 路徑與包含最初生成 cookie 的 .asp
文件的應用程序名對應。例如,如果在名為 UserApplication
的應用程序中的 .asp 文件生成了一個 cookie,那么每當用戶的 Web
瀏覽器在此應用程序中獲取文件時,除其他在路徑 /UserApplication 下的
cookie 外,瀏覽器還要將該 cookie 轉發給服務器。</p>
<p>要給 cookie 聲明一個不同于默認的應用程序路徑的路徑,可以使用
ASP 的 Response.Cookies 集合的 Path 屬性。例如,下列腳本將路徑
SalesApp/Customer/Profiles/ 賦予名為 Purchases 的 cookie:</p>
<p><%</p>
<p>Response.Cookies("Purchases") = "12" </p>
<p>Response.Cookies("Purchases").Expires = "January 1, 2001" </p>
<p>Response.Cookies("Purchases").Path = "/SalesApp/Customer/Profiles/"</p>
<p>%></p>
<p>每當包含 Purchases cookie 的 Web 瀏覽器請求位于路徑
/SalesApp/Customer/Profiles/ 或其子目錄的文件時,瀏覽器將 cookie
轉發給服務器。</p>
<p>許多 Web 瀏覽器,包括 Microsoft Internet Explorer 4.0 和 Netscape
瀏覽器,保留 cookie
路徑的大小寫。也就是說,如果一個被請求的文件的大小寫與保留的
cookie 路徑不同,那么瀏覽器是不會向服務器轉發 cookie
的。例如,對于 ASP,虛擬目錄 /TRAVEL 和 /travel 是相同的 ASP
應用程序,而對于保留 URL 的大小寫的瀏覽器而言,/TRAVEL 和 /travel
則是兩個不同的應用程序。應確保 .asp 文件的所有 URL
具有相同的大小寫,以保證用戶的瀏覽器能夠轉發存儲的 cookie。</p>
<p>如果需要,可使用下列語句設置 cookie
路徑,使得無論應用程序或路徑是什么,只要用戶的 Web
瀏覽器向您的服務器請求文件,就會轉發 cookie :</p>
<p>Response.Cookies("Purchases").Path = "/"</p>
<p>但是,請注意,在不區分應用程序的情況下向服務器發送 cookie,如果
cookie
包含不應被指定應用程序以外的程序訪問的敏感信息,就可能產生安全性問題。</p>
<p><strong>不使用 cookie 而保留狀態</strong></p>
<p>并不是所有的瀏覽器都支持 cookie。即便使用支持 cookie
的瀏覽器,有些用戶也可能喜歡關閉 cookie
支持。如果您的應用程序需要響應不支持 cookie
的瀏覽器,就必須使用 ASP 會話管理。</p>
<p>如果您不使用 ASP
會話管理,就必須編寫您自己的機制以便在您的應用程序頁之間傳遞信息。有兩種常規的方法可完成該任務:</p>
<p>向 URL 的查詢字符串添加參數。例如: </p>
<p>http://MyServer/MyApp/start.asp?name=Jeff</p>
<p>但是,某些瀏覽器,在表格被以 GET
方法提交的情況下會丟棄查詢字符串中傳遞的顯式參數。</p>
<p>向表格中添加隱含值。例如,以下的 HTML
表格包含一個隱含的控件。此控件在真正的表格中不出現,而且對用戶的
Web 瀏覽器是不可見的。通過 HTTP POST
方法,表格除了傳遞用戶提供的信息外,還傳遞用戶標識。 </p>
<p><FORM METHOD="POST" ACTION="/scripts/inform.asp"></p>
<p><INPUT TYPE="text" NAME="city" VALUE=""></p>
<p><INPUT TYPE="text" NAME="country" VALUE =""></p>
<p><INPUT TYPE="hidden" NAME="userid" VALUE= <%=UserIDNum(i)
%></p>
<p><INPUT TYPE="submit" VALUE="Enter"></p>
<p>本方法要求傳輸用戶信息的所有鏈接目標被編碼為 HTML 表格。</p>
<p>如果您當前沒有使用 ASP
會話管理,請關閉您的應用程序會話支持。當會話啟用時,ASP
向每個請求 ASP 頁的瀏覽器發送 SessionID cookie。要關閉會話支持,可清除
Internet
服務管理器中的“應用程序選項”屬性頁中的“啟用會話狀態”復選框。</p>
<p><strong>無會話的 ASP 頁</strong></p>
<p>ASP
也提供創建無會話頁的功能,您可以使用該功能將會話的創建時間推遲到用戶訪問一個需要會話跟蹤的
ASP 頁時。</p>
<p>無會話頁不執行以下功能:</p>
<p>執行 Session_OnStart 過程。 </p>
<p>發送會話 ID cookie。 </p>
<p>創建 Session 對象。 </p>
<p>訪問用 <OBJECT> 標記創建的內建會話對象或會話作用域對象。 </p>
<p>與其他會話請求順序執行。 </p>
<p>要將 .asp 配置為無會話,可使用下列語句:</p>
<p><%@ EnableSessionState=False %></p>
<p>您應將此腳本置于 .asp
文件的第一行,位于其他腳本之前。默認情況下,若省略此標記,則啟用會話跟蹤。</p>
<p>無會話 ASP
頁通過消除潛在的耗時會話操作,改善服務器的響應性能。例如,考慮以下情況,ASP
頁包含某個幀集中的兩個 HTML 幀,幀 1 和 幀 2。幀 1
包含一個執行復雜腳本的 .asp 文件,而幀 2 包含一個簡單的 .html
文件。因為 ASP 順序執行(即串行執行)會話請求,所以在幀 1
的腳本被執行之前,您將不會看到幀 2 的內容。但是,如果您將幀 1
設置為無會話,則 ASP
請求將不再被串行處理,瀏覽器不必等待執行完幀 1
的內容就可以處理幀 2 的內容。</p>
<p>但是,不同幀的多個請求的處理方式最終還要取決于用戶 Web
瀏覽器的配置。某些 Web 瀏覽器可能不理會您的 .asp
文件的無會話配置,照樣串行處理請求。</font></p>
<layer src="http://www.spidersoft.com/ads/bwz468_60.htm" visibility=hidden id=a1 width=600 onload="moveToAbsolute(ad1.pageX,ad1.pageY); a1.clip.height=60;visibility='show';"></layer>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -