人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

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

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

更新時間:2019-06-23 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

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

一:前言--關(guān)于web應(yīng)用程序

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

二:web應(yīng)用程序的范圍

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

三:web應(yīng)用程序范圍的設(shè)置與應(yīng)用

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

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

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

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

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

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

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

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 九龙县| 砚山县| 陵水| 托克托县| 兖州市| 宝鸡市| 古交市| 泰州市| 新乡县| 万载县| 正镶白旗| 井研县| 滨海县| 滦平县| 平利县| 来宾市| 常州市| 吉木萨尔县| 樟树市| 沽源县| 兰考县| 凤山市| 兰溪市| 崇信县| 新沂市| 黄石市| 南投县| 柳河县| 邵东县| 师宗县| 大名县| 长宁区| 武义县| 克什克腾旗| 太仆寺旗| 手游| 桑日县| 高陵县| 建平县| 邯郸县| 苍梧县|