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