ASP清除Application緩存的問題
Asp中的 Application 是一(yī)個公用(yòng)的對像
我們可(kě)以用一(yī)個語句來清理服務器上的所有Application 對像
application.contents.removeall '清空所有緩存
會員登陸後修改application變量,比如我們用一個application("login")=true表示(shì)登陸(lù)了.那麽登陸時就應該先進行一次的application("login")=ture
直到其退出後才會將其值修改為false.
當(dāng)然登陸前先檢查一下application("login")的值,若不(bú)存在或是false就可以讓其進行登陸,否則做出限製跟轉(zhuǎn)至錯(cuò)誤提示頁麵.
而(ér)session隻是一個單用(yòng)戶(hù)的級別,不合適用的.而(ér)session變量是其他用戶(hù)根本取不到的.
剩下要(yào)考慮的(de)是非(fēi)正常退出等,如果user1直接關閉的瀏覽器,那麽沒有退出(chū)時進行修改application("login")的(de)值,這時會發生所有用戶(hù)都登陸不上(shàng)的(de)問題.這(zhè)裏要用到session_OnEnd事件進行一次的清(qīng)除變量,這裏麵顯然要加(jiā)上application("login")=false或null這樣的修改.但是還要把session.tiomeout時間(jiān)設短一點,要不如果某用戶關閉後要等(děng)很長的時間後才可能登陸的.但是過短又不行,如果太短的話,你的這個用戶連(lián)一個填寫表單完成的機會都沒有,那麽user2會搶先登陸進去的.顯然,這裏最好的辦法就是(shì)增加一個提醒(xǐng)機製進行計時(shí),比如我設的是十分鍾,在登陸者(zhě)的頁麵上會出(chū)現計時的(de),倒計至9分鍾左右讓其點一(yī)個按鈕與服務器(qì)交互一下,這樣計時器重新從十分鍾開始(shǐ)計時.或(huò)者寫一個小(xiǎo)的自動請求服(fú)務的ajax,讓其每隔1分鍾向服務器發一次請求,這樣時間你可以設置為略(luè)大於1分鍾而保證在(zài)線者的不掉線,別人不能搶入,而其關閉後,顯然1分鍾後允許別人登陸.
過期頁麵的處理,如果一個用戶在(zài)session時間內無任何服務器動作的話,可由別的登陸用戶進行搶入,這時,也就是(shì)十分鍾後,該頁麵進行了刷新操作,此時必須把這個用戶進行一個過期處理.不能讓其再(zài)進入,如果不加過(guò)期處理,此(cǐ)時會發生兩個人(rén)同(tóng)時在線的情(qíng)況(kuàng).
搶登陸,假定兩(liǎng)地都有用戶在同時搶登(dēng)陸時,如果進行處(chù)理.user1登陸時發現application("login")的(de)值是可以(yǐ)登陸的.於是就正在填(tián)寫,而user2此時也在讀取application的值,發現可以登陸,那麽兩者會同時登陸上(shàng)的.解決的辦法是:
1,頁麵進(jìn)行取值的方法,也就是說當有人(rén)請求(qiú)login頁麵時就先進行application值的更改.其(qí)他用戶再請求時已經不能請求到頁(yè)麵了.或請求到了不允話登陸的頁麵信息.但如果是這樣的話,不管登陸沒有登陸都是要清除的(de),所以(yǐ)session_OnEnd事件中不管是否登(dēng)陸都要進行application的靖除的.
2.鎖定(dìng)變量的方法(fǎ),application變量是可以鎖(suǒ)定的,進入(rù)頁麵時先將application進(jìn)行鎖定,而其他用戶是取不到(dào)值的.取不到值時就好辦了,提示有用戶(hù)正在嚐試登陸.當然無論那個嚐試登陸的是否登陸都要對其進行解鎖的.也就是說在關閉頁麵中,最好是這樣,寫一個ajax進行application進行解除鎖定.當然登陸完成時也要進行解鎖定.最後是如(rú)果意外時,session_OnEnd也要進行嚐試解鎖定,如果變量(liàng)正在鎖(suǒ)定(dìng),則解鎖定就是嚐試解鎖定的意思.
當然,數據(jù)庫法也(yě)可以用的,數據庫中(zhōng)有一個字段進行(háng)標誌,但這(zhè)樣的解決方法隻是將(jiāng)使用application變量(liàng),換成了使用字段而(ér)已.其他都是一樣(yàng)的.但速度上與(yǔ)安全上依賴於application變量比較好的.
一樓,session變量是一個用戶級變量,請問另一個用戶在登陸時如果得到其他用戶的變量?這樣(yàng)不亂套了嗎?別忘記一句話:每一(yī)個用(yòng)戶在請求頁麵時都自動生成一個session的.而application則是全局變量,網頁的(de)即(jí)時聊天就是來源於這個變量的.但(dàn)變量過(guò)大時會(huì)占用服務器較大(dà)的內存的!
二樓,就是一個統計在(zài)線用戶(hù)的程序,請問,考慮到兩個(gè)用戶在同時嚐試(shì)登陸的情況嗎?這種方法可(kě)以是登陸上,但必須(xū)加代碼再測試一下是否有同時(shí)在線用戶,如果有(yǒu),必須讓其當即退出登陸才(cái)行的,這樣才能做到單用(yòng)戶登陸(lù).
不過一個用戶登陸的網站你(nǐ)幹什麽用呢(ne)?如果是單單限製登陸用戶(hù)不能進入login界麵的話,可(kě)以使用(yòng)session值,在登陸界麵(miàn)中進行一次(cì)的簡單判斷嘛(ma).那樣的話又非(fēi)常(cháng)簡單,比(bǐ)如登(dēng)陸用戶登陸後會有session("username"),在(zài)登陸頁麵上去查(chá)這個查是否為空或是否存在,若為空或存在則正常登陸,否則轉向錯誤頁麵不就行了?
關鍵詞:ASP
閱讀本文後您有什麽(me)感想? 已有 人給出評(píng)價!
- 0
- 11
- 11
- 2
- 2
- 15