當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

對于web應用程序的范圍與session變量失去問題的深入研究!

對于web應用程序的范圍與session變量失去問題的深入研究!

更新時間:2019-06-23 文章作者:未知 信息來源:網絡 閱讀次數:

引言:最近不少網友都有這樣的疑問,就是當我們在一個網頁間設定了一個session變量后,到另一個網頁,卻消失了。這
是什么樣的原因呢。如果你詳細的讀完本文,相信能給你一個完整的答復!

一:前言--關于web應用程序

我們今天所討論的web 應用程序是指由Windows NT Option Pack 提供的一個建立 Internet 或Intranet的 Web應用程
序的平臺。而Web 應用程序可以作為一組 Web 頁交付使用,它們向封裝了事務邏輯并提供訪問存儲重要商業信息的數據庫
應用程序和 ActiveX 組件提供用戶界面。也就是我們使用的asp程序。
創建應用程序時,必須用 Internet 服務管理器在 Web 站點中指定應用程序的啟動點目錄。在發現其他啟動點之前,
Web 站點某啟動點目錄下的每個文件和目錄被視為是應用程序的一部分。因此,可以使用目錄邊界定義應用程序的范圍。
基于 ASP 的應用程序是 ASP 頁和 ActiveX 組件的集合。當用戶定義應用程序時,將使用 IIS指定用戶的 Web 站點中
應用程序啟動點的目錄。在用戶的 Web 站點中每個位于啟動點目錄下的文件和文件夾都被認為是應用程序的一部分,直到
發現另外的啟動點目錄為止。這樣,用戶就可以使用目錄作為邊界定義應用程序的作用域。每個 Web 站點可以有多個應用
程序,而每個應用程序的配置都可以不同。

二:web應用程序的范圍

正如上面的定義所提到的。我們將一個web應用程序,如:購物程序,新聞程序,聊天程序......等這樣一些我們開發
的asp頁面單獨集中來成為一個web應用程序。結合實例來說,如我們將一個購物程序的所有頁面(如:注冊頁面,購物
車,收銀臺,訂單頁面,商品頁面)統一起來,統稱為一個web購物程序,它的應用程序范圍就是從購物開始購物結束所涉
及到的所有頁面。而在iis中,系統須將其分配到一個虛擬目錄中去,而該虛擬目錄的所有頁面,及其子目錄就是其購物程
序的物理范圍。如下表所示。
*shop—index.asp
—buy.asp
+catalog—list.asp
+customer—a.asp
—b.asp
其中*號,代表的是一個虛擬目錄,+代表的是其中的子目錄。所以,整個上面的所有頁面構成了一個web應用程序。但是,
也可以在一個虛擬目錄下建立另一個應用程序。如下表
*shop—index.asp
—buy.asp
*book—book.asp
+catalog—list.asp
+customer—a.asp
—b.asp
這樣,shop下的index.asp,list.asp,a.asp等屬于一個應用程序,而book下的book.asp則不屬于shop,他是一個新的web應
用程序。

三:web應用程序范圍的設置與應用

如果你的開發環境是Visual InterDev6.0,那么,應用程序的設置幾乎不用你費心去考慮,一切有VI6來給你設置好
了,并在IIS中自動建立了虛擬目錄,但如果是其他的話,你可能需要在IIS中自己去設定他。具體步驟如下:
創建應用程序
1--在“Internet 服務管理器”中,選擇作為應用程序啟動點的目錄。可以將 Web 站點的主目錄指定為 應用程
序的啟動點。
2--打開該目錄的屬性頁,然后單擊“主目錄”、“虛擬目錄”或“目錄”選項卡。
3--在“名稱”文本框中,為應用程序鍵入名稱。'當然,應用程序的名稱也不是必要的。但推薦設定。
4--單擊“創建”按鈕。
此后,你就可以將你的web應用程序目錄映射到該目錄下即可。
明白以上的基本定義,對我們網絡開發人員十分必要,應為,正是由于有了一個web應用程序的范圍,才可以使web應用
程序能夠在應用程序的文件間共享信息,例如,ASP 應用程序可在其網頁間共享環境流、會話狀態和變量設置。也就是我
們經常使用的session,application對象等。應為只有規定了一個應用程序及其范圍,session,application等對象才有意
義。

四:session變量“丟失”的問題

談到了那么多的概念,終于可以說道實質性的問題了,session對象是web應用程序中最重要的對像之一,正是它的存
在,使得我們可以在跨網頁間傳送數據,分辨不同用戶成為可能。我們只要將變量制定給session即可實現。這一過程即
session("temp")=temp即可。但最近不少網友都有這樣的疑問,就是當我們在一個網頁間設定了一個session變量后,到另
一個網頁,卻消失了。這是什么樣的原因呢。
根據上面的概念,我們可以將其原因,和處理辦法總結如下。
1:asp網頁跨了多個web應用程序:
這個原因就是你的另一個網頁可能是另一個web應用程序。以前,一些資料過分的強調了會話變量的單一性,好像一個
用戶連接到一個web主機之后,只可能創建一個會話變量,這是不對的,分辨會話變量的依據正是我們上面所提到的web應
用程序范圍,而不是單獨根據用戶而建立的,你可以試一試下面的一段代碼。
test.asp
<% @ language=vbscript %>
<%
session("temp")="temp"
Response.Write session.SessionID 'sessionID用來分辨一個應用程序間的單獨客戶。
%>

將test.asp分別拷貝到兩個不同的虛擬目錄下。你就可以看到,他是兩個不同的值了。所以,可能你的網頁跨了不同的應
用程序。
當然,這種情況對于初學者可能碰到,對于有經驗的人可能犯的是這樣的錯誤,即他們本身為一個根目錄,但在制定虛
擬目錄時將其子目錄又設為一個虛擬目錄了,就如同我們上面提到的第二個表結構一樣。這樣他同樣成為了兩個不同的web
應用程序。也就不難解釋為什么會出錯了。

2:可能是啟動了多個同一應用程序。
第一種情況很好發現,也容易改正,但這第二種情況就不容易發現,也較難改正。這里我們引入一個另一個的概念。多
個同一應用程序共存,(好長呀,關鍵是微軟的概念我忘了,這個是我自己起的。呵呵。囊馑紡倪@個定義上很好
理解,就是對于同一個應用程序。同一時間可以在內存中存在多個。如我們常見的acdsee.exe,你可以通過點擊啟動多個
acdsee.exe。而另外一種則不能,我們就不說它的定義了(如果說的話,就是相同應用程序不共存,呵呵。┰谕粫r間
內,如果已經啟動了一個應用程序,則不能再啟動相同的應用的應用程序了。如foxmail.exe,當你啟動了一個
foxmail.exe后,就只可能在內存中存在一個foxmail.如果你在啟動,則不會再開一個foxmail窗口了。
而我們的ie屬于前者,你可以通過點擊ie,啟動多個ie應用程序。此時,我們做下面另一個測試。你將上面的代碼
test.asp放入一個虛擬目錄中。然后,你點擊ie啟動(注意:是通過點擊Ie啟動,不是按CTRL+N,也不是在一個ie窗口點
擊文件,重新打開一個窗口)此時,你可以發現,他們雖然是同一個地址,同一個用戶,但sessionID還是不同的,當然,
你還可以建另一個文件。如
test2.asp
<% @ language=vbscript %>
<%
response.write session("temp")
%>
這時,你在另一個ie窗口下,你就會發現session("temp")為空,也就是說,我們剛才明明在test.asp中附了值,而且
test2.asp和test.asp在同一虛擬目錄下,但session("temp")卻丟失了。原來,相對于相同的asp應用程序。不同的ie相對
的卻是不同的asp應用程序。(有點像繞口令難懂是吧。)不過,我們已經明白了它的起因,相信不難解決他。
這里還要注意的是,我們剛才一再提到的是通過點擊Ie,而不是通過按CTRL+N,也不是在一個ie窗口點擊文件,重新
打開一個窗口,這里要說明的是如果你通過在一個ie窗口打開的窗口,它屬于派生窗口,而不是共生窗口,就是說,此時
的另一個窗口屬于和其上一個窗口是繼承關系,屬于同一個應用程序范圍。
3:連接不當
其實,大部分的網友碰到的問題是通過點擊頁面中的連接新開窗口而發現session變量丟失的。他同按ctrl+N新開窗口
的意義相同。但此時為什么會出問題呢?我們來分析一下它的連接方式?赡転<a href="xx.asp" traget=_blank>click
me </a>通過這樣點擊的連接同ctrl+n 是相同的,應該不會出問題。還有一種連接式通過腳本控制的如
window.open "xx.asp","name","toolbar=no"這樣的代碼,他就可能發生這樣的問題。如果通過點擊ie開了多個共生窗口
(許多網友為了節省時間,他們喜歡開多個窗口。比如我。)。就是他可能在新開的窗口中如果含有相同的name的窗口。
則此時,就可能發生連接不當導致session丟失,其實,原因還是通第二種一樣。還有一種更極端的方式開新窗口,通過用
document.write 在一個腳本中動態寫出新的頁面,而該頁面的url是不存在的,這樣就更可能出問題了,應為session正是
通過url,http來追蹤的。所以如果其頁面地址是動態的話。則session就根本無法追蹤了。

相信通過以上例子的分析,可能會解釋你在應用session中出現的大部分問題。但不是全部(如過你禁用cookie的話,
呵呵。┑,如果你將以上的概念都弄懂,則可以解決你在應用session中出現的所用問題了。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
亚洲嫩草影院久久精品