前面砍掉~~
我先把Application和Session的差別說明一下!
Application:所有人共同使用這個變數
Session :每個人獨立使用這個變數
這樣講可能很不清楚~因為你會想說~
我用的都是同一個變數名稱呀~怎麼不共同和獨立~
其實不管Application或Session都會在Server上用id來識別
而不是利用我們的變數名稱來識別喔~
舉個例應該就會懂了:
假設有二個使用者A、B
網站有Application("counter_App")、Session("counter_Ses")
某一個網頁會同時讀取這二個值,我們再把這二個值的id顯示出來
不同使用者得到的id如下:
A:Application("counter_App").ID = #100
Session("counter_Ses").ID = #101
B:Application("counter_App").ID = #100
Session("counter_Ses").ID = #102
上述的說明是在說取得該變數ID時會得到的值,而不是在設定ID,不要誤會囉!
由此可以知道Application在各使用者之間是相同的,Session則是不同的...
: 非常感謝,我剛剛查了一下,發現Application 有下面的問題
: Application物件的生命有限,預設超過20分鐘無人連線,或web伺服器重新啟動後,
↑這個是Session ↑這個是Application
: Application物件就會被清除。
: 1. 依據上述,儘管已經連上網站,是否只要沒有更改Application("counter1")的動作
: Application("counter1")就會自動清除? 導致取得的Application("counter1")
: 為空值? 或是回復至原來的值?
Ans:不會,因為Application在啟動後,第一次有人訪問網站時就會存在了!
當網站關閉的時候Application才會消失!
: 因為我在使用者進入網站時,Application("counter1")會加1
: 後面則僅讀取Application("counter1")的值,
: 如果我把Application 的值儲存到Session("counter1")是否就不會有問題了?
: 用Session("counter1")傳遞,session.timeout設定為300 是否可行?
Ans:不需要,你想抓的是整個網站的瀏覽人數還是在線人數?
用了Session的話,每個使用者得到的值會不同...
: 2. 關於Application("counter1"),我在下面的寫法,
: 有可能讓多人取得同一個Application值嗎?
Ans:照你下面的寫法,會取得文字檔的值而已,不會跟著變化...
: 尤其是在由文字檔中取得數字上,如果A進入網站後,文字檔中取得的數值10
: Application("counter1") 為 11,在A還沒離開網站前,
: B進來了,B取得的Application("counter1") 也會是11嗎? 或是12?
Ans:B得到的還是11,但因為你後面有用+1,所以最後會變成12...
: 在一開始的網頁中,有下面的程式碼
: Application.Lock()
: Application("counter1") = Application("counter1") + 1
: Application.UnLock()
Ans:這樣的寫法,每次進入網頁就會+1喔...我reload 50次就會+50...
: 同時在Global.asax 有下面的設定
: '應用程式開啟時執行的程式碼,由文字檔中取得數字
網站執行後,第一次有人進來會啟動下面的程式
: Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
: Application("counter1") = My.Computer.FileSystem.ReadAllText(FILE_COUNTER)
: End Sub
網站關閉時,才會啟動下面的程式
: '應用程式關閉時執行的程式碼
: Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
: If Not Application("counter1") Is Nothing Then
: My.Computer.FileSystem.WriteAllText(FILE_COUNTER, _
: Application("counter1"), False)
: End If
: End Sub
每個使用者的連線會啟動的是Session_OnStart,斷線會啟動的是Session_OnEnd
因為我不知道你的counter想做的是網站的總瀏覽人數還是要做目前線上人數
所以我不敢給你下定論,相關的觀念我提供下面二個網站給你,應該就清楚了
http://www.study-area.org/coobila/tutorial_328.html
↑是用asp為例子,但和asp.net的觀念不變
http://www.slidefinder.net/d/dept_11776/11165964/p19
↑asp.net的說明,看#362~#364就可以,其他的要看完也沒關係
補充一下:
因為我自己沒有在使用Application所以可能觀念上有錯誤的地方!
如果有其他大大覺得哪有錯的,歡迎指正!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.76.190.21
※ 編輯: opoepev 來自: 211.76.190.21 (10/21 14:26)