防范多人使用統(tǒng)一用戶(hù)上網(wǎng)與用戶(hù)非正常退出注銷(xiāo)問(wèn)題
發(fā)表時(shí)間:2023-08-05 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]1,不要完全靠session來(lái)控制,session會(huì)有一個(gè)失效時(shí)間,這個(gè)時(shí)間不宜設(shè)的太短,否則正常工作會(huì)受影響。用監(jiān)聽(tīng)事件的方法也是不可取的,事實(shí)上這個(gè)事件也會(huì)等到session過(guò)期的時(shí)候才會(huì)觸發(fā)。...
1,不要完全靠session來(lái)控制,session會(huì)有一個(gè)失效時(shí)間,這個(gè)時(shí)間不宜設(shè)的太短,否則正常工作會(huì)受影響。用監(jiān)聽(tīng)事件的方法也是不可取的,事實(shí)上這個(gè)事件也會(huì)等到session過(guò)期的時(shí)候才會(huì)觸發(fā)。
2,可以采用隱藏楨的方式來(lái)檢測(cè)用戶(hù)的在線,這個(gè)時(shí)間可以設(shè)的比較短。比如5分鐘。就像dev-club.com一樣。在這個(gè)楨里得到用戶(hù)名,當(dāng)時(shí)的IP,以及訪問(wèn)時(shí)間。記錄在application中。
3,當(dāng)另有用戶(hù)來(lái)訪問(wèn)的時(shí)候,就判斷在application的數(shù)據(jù),如果已經(jīng)有該用戶(hù)的訪問(wèn)記錄,就按IP和時(shí)間來(lái)判斷,是否可以繼續(xù)。比如說(shuō)IP不同,但時(shí)間隔了很久了,就允許訪問(wèn)。
4,你還可以再寫(xiě)一個(gè)后臺(tái)進(jìn)程來(lái)對(duì)application中的過(guò)期數(shù)據(jù)進(jìn)行清理。
5,對(duì)于使用代理或網(wǎng)關(guān)訪問(wèn)的用戶(hù)判斷可以這樣,session對(duì)象有一個(gè)方法叫g(shù)etId(),可以得到一個(gè)唯一的ID。即使使用同一IP來(lái)訪問(wèn),這個(gè)ID也是不同的,可以加以區(qū)分。
嗯。以上都是理論。我沒(méi)有做過(guò)。但應(yīng)該是可行的。
原問(wèn)題xinlcao 于 2002-12-21 11:06:09 加貼在 Java程序設(shè)計(jì) ←返回版面
請(qǐng)高手幫忙,遇到兩個(gè)問(wèn)題:
1、如何限制同一賬號(hào)在同一時(shí)間只能有一名用戶(hù)使用,即防止多人使用統(tǒng)一用戶(hù)上網(wǎng);
2、如何在用戶(hù)直接關(guān)閉瀏覽器而不是按退出按鈕時(shí)注銷(xiāo)用戶(hù)。
我不知道這兩個(gè)問(wèn)題能否在b/s結(jié)構(gòu)中很好的解決,請(qǐng)高手指點(diǎn)。
下面是我的想法和疑惑:
1、可以通過(guò)cookie或session取得用戶(hù)登陸的記錄,但由于http協(xié)議的連接不連續(xù),如果兩個(gè)用戶(hù)用同一賬號(hào)上網(wǎng),只要不是同時(shí)向服務(wù)器請(qǐng)求,就無(wú)法知道到底是不是合用同一賬號(hào),曾想試著同時(shí)記錄用戶(hù)上網(wǎng)時(shí)的用戶(hù)名和ip地址,只要在一定時(shí)間內(nèi)登陸的同一用戶(hù)名對(duì)應(yīng)的ip地址不同,即可認(rèn)為是合用同一賬號(hào),但又引出兩個(gè)新的問(wèn)題:(1)如果兩個(gè)用戶(hù)在網(wǎng)吧上網(wǎng)或有代理服務(wù)器的內(nèi)部網(wǎng)上網(wǎng),則獲得的ip地址也可能相同;(2)如果一個(gè)用戶(hù)撥號(hào)上網(wǎng),突然計(jì)算機(jī)死機(jī)或突然網(wǎng)絡(luò)中斷,當(dāng)他再次上網(wǎng)時(shí),由于撥號(hào)每次ip都可能不同,系統(tǒng)將把它當(dāng)作另一個(gè)用戶(hù)處理。
2、想過(guò)制作一個(gè)記錄用戶(hù)登陸信息的類(lèi)class UserLogin,然后啟動(dòng)一個(gè)線程不停的定時(shí)查看登陸用戶(hù)的信息,根據(jù)一定的規(guī)則檢查用戶(hù)的合法性,但也無(wú)法解決上面的問(wèn)題。
3、對(duì)于用戶(hù)非正常退出的注銷(xiāo),曾試著用監(jiān)聽(tīng)session的值來(lái)判斷:
public class UserLogin implements HttpSessionBindingListener:聲明類(lèi)時(shí)引入監(jiān)聽(tīng)器
public void valueUnbound(HttpSessionBindingEvent e):獲得session時(shí)的事件
public void valueBound(HttpSessionBindingEvent e):獲得用戶(hù)登陸時(shí)向session寫(xiě)入數(shù)據(jù)時(shí)的事件
一個(gè)用戶(hù)登陸時(shí)好判斷,只要從e中得到當(dāng)時(shí)的session,然后從中獲得向session中寫(xiě)入的變量和值,但是當(dāng)用戶(hù)由于session失效退出時(shí),又無(wú)法判斷,因?yàn)檫@時(shí)無(wú)法知道是哪個(gè)用戶(hù)退出了,從e中獲得的session已經(jīng)是實(shí)效的了。
先謝謝大家的幫忙!!!幫忙幫忙
參見(jiàn):http://www.dev-club.com/club/bbs/showAnnounce.asp?id=1839973