<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      防范多人使用統一用戶上網與用戶非正常退出注銷問題

      [摘要]1,不要完全靠session來控制,session會有一個失效時間,這個時間不宜設的太短,否則正常工作會受影響。用監聽事件的方法也是不可取的,事實上這個事件也會等到session過期的時候才會觸發。...
      1,不要完全靠session來控制,session會有一個失效時間,這個時間不宜設的太短,否則正常工作會受影響。用監聽事件的方法也是不可取的,事實上這個事件也會等到session過期的時候才會觸發。
      2,可以采用隱藏楨的方式來檢測用戶的在線,這個時間可以設的比較短。比如5分鐘。就像dev-club.com一樣。在這個楨里得到用戶名,當時的IP,以及訪問時間。記錄在application中。
      3,當另有用戶來訪問的時候,就判斷在application的數據,如果已經有該用戶的訪問記錄,就按IP和時間來判斷,是否可以繼續。比如說IP不同,但時間隔了很久了,就允許訪問。
      4,你還可以再寫一個后臺進程來對application中的過期數據進行清理。
      5,對于使用代理或網關訪問的用戶判斷可以這樣,session對象有一個方法叫getId(),可以得到一個唯一的ID。即使使用同一IP來訪問,這個ID也是不同的,可以加以區分。

      嗯。以上都是理論。我沒有做過。但應該是可行的。



      原問題
      xinlcao 于 2002-12-21 11:06:09 加貼在 Java程序設計 ←返回版面 
      請高手幫忙,遇到兩個問題:
      1、如何限制同一賬號在同一時間只能有一名用戶使用,即防止多人使用統一用戶上網;
      2、如何在用戶直接關閉瀏覽器而不是按退出按鈕時注銷用戶。
      我不知道這兩個問題能否在b/s結構中很好的解決,請高手指點。
      下面是我的想法和疑惑:
      1、可以通過cookie或session取得用戶登陸的記錄,但由于http協議的連接不連續,如果兩個用戶用同一賬號上網,只要不是同時向服務器請求,就無法知道到底是不是合用同一賬號,曾想試著同時記錄用戶上網時的用戶名和ip地址,只要在一定時間內登陸的同一用戶名對應的ip地址不同,即可認為是合用同一賬號,但又引出兩個新的問題:(1)如果兩個用戶在網吧上網或有代理服務器的內部網上網,則獲得的ip地址也可能相同;(2)如果一個用戶撥號上網,突然計算機死機或突然網絡中斷,當他再次上網時,由于撥號每次ip都可能不同,系統將把它當作另一個用戶處理。
      2、想過制作一個記錄用戶登陸信息的類class UserLogin,然后啟動一個線程不停的定時查看登陸用戶的信息,根據一定的規則檢查用戶的合法性,但也無法解決上面的問題。
      3、對于用戶非正常退出的注銷,曾試著用監聽session的值來判斷:
      public class UserLogin implements HttpSessionBindingListener:聲明類時引入監聽器
      public void valueUnbound(HttpSessionBindingEvent e):獲得session時的事件
      public void valueBound(HttpSessionBindingEvent e):獲得用戶登陸時向session寫入數據時的事件
      一個用戶登陸時好判斷,只要從e中得到當時的session,然后從中獲得向session中寫入的變量和值,但是當用戶由于session失效退出時,又無法判斷,因為這時無法知道是哪個用戶退出了,從e中獲得的session已經是實效的了。
      先謝謝大家的幫忙!。兔兔

      參見:http://www.dev-club.com/club/bbs/showAnnounce.asp?id=1839973


      日韩精品一区二区三区高清