<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

      <noframes id="xpjh9">
      VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
      SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
      當前位置:
      首頁 > 網站開發 > ASPnet >
      • asp.net教程之asp防止同時登陸的問題

      • 2017-06-11 20:15 來源:未知
      實現這個功能可有兩種方式: 

      1。application 
      用application對象:如果做的是大型社區,可能要為每個登陸id生成一個appliaction,這樣做雖然程序上設計會簡單些但登陸用戶過多及其耗費服務器資源,這里決不提倡,因為appliaction對象在用戶登陸時生成很容易, 但是要做到真正的隨著用戶退出系統完全釋放,到目前還沒看到更好的方法~ 

      <%  
      .....取用戶名username.....  
      if  Application(username)<>""  then  
           response.write  "該用戶已經登錄"  
           response.end  
      end  if  
      Application(username)=username  ''存入該用戶的用戶名 
      %>

      在global文件中加上session  onend事件,下線時Application("isuserlogin")=false  
      此外還要檢測是否吊線,有專門的辦法,是server對象里的某項  

      (參: http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=815) 

      2。數據庫+asp 
      做起來可能會復雜些,但是適合有大量登陸用戶的系統。 

      首先為用戶建立數據庫-用access新建一個onlyTOL8.mdb 

      數據表1: users 存放用戶注冊資料 
      下設數據表:uID(自動編號) userName(字符型) userPass(字符型) 

      數據表2: onlyLogin 存放用戶臨時登陸信息 
      下設數據表: OLname(字符型) OLtime(日期型) OLip(字符型) 

      數據庫建好后直接向users表中手動添加數據 userName表添加TOL8,userPass表里添加111, 

      下面來做用戶登陸界面,復制下面代碼存成onlyLogin.asp文件。 

      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      <title>禁止同一賬號不同地區同時登陸</title>
      </head>
      <body>
      <form name="form1" method="post" action="loginPost.asp">
      用戶名:<input name="userName" type="text" id="userName" size="15" maxlength="5">
      密碼:<input name="userPass" type="password" id="userPass" size="15" maxlength="15">
      <input type="submit" name="Submit" value="Login">
      </form>
      </body>
      </html>


      完成后在新建一個loginCONN.asp文件復制下面的代碼保存用于連接數據庫 

      <%
      Dim CONN_TOL8
      Dim Conn_T
      Dim mmdd
      mmdd="onlyTOL8.mdb"
      Set CONN_TOL8 = Server.CreateObject("ADODB.Connection")
      Conn_T="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&mmdd&"")
      on error resume next
      CONN_TOL8.Open Conn_T %>


      下面做一個loginPost.asp文件也存在這個目錄下,這是關鍵,仔細看下面的代碼: 

      <!--#include file="loginCONN.asp" -->
      <%
      ''刪除maxTime時間內部活動的用戶,maxTime 在loginCONN.asp文件里面已經定義好了
      Conn_TOL8.Execute("Delete From onlyLogin where DATEDIFF(''s'',OLtime, now()) > "& maxTime & "")
      ''================================================================
      Dim rs, ts, txt, sql, userName, userPass
      if Request.Form("Submit")="Login" then
      userName=Request.Form("userName")''獲取表單用戶登陸名
      userPass=Request.Form("userPass")''獲取表單用戶登陸密碼
      ''由于我們這里討論的不是安全問題所以用戶密碼都沒有加密
      Set rs = Server.CreateObject("ADODB.RECORDSET")
      sql="SELECT * FROM users where userName = '' "& userName & "'' and userPass = '' "& userPass & "''"
      rs.Open sql, CONN_TOL8,1,1
      IF not rs.eof then
      Call isOK(userName) '' 用戶名密碼正確調用次過程,isOK將會在下面的程序中定制。
      else
      Response.Write("<a href=javascript:history.go(-1)>用戶名或密碼錯誤</a>")
      Response.End()
      end if
      rs.Close
      Set rs=Nothing
      end if
      Sub isOK(userName)
      Dim Olip '' 數據庫中當前登陸用戶名保存的ip
      Dim Oltime '' 數據庫中當前登陸用戶名保存的最后刷新網頁的時間,是計算用戶是否在線的重要數據。
      Dim OLip1 '' 記錄當前用戶登陸ip,用來區分是否為同一用戶的標示
      OLip1=Request.ServerVariables("REMOTE_ADDR")''取得提交登陸信息用戶的IP
      Set ts=Conn_TOL8.execute("Select * FROM onlyLogin WHERE OLname=''"& userName & "''")
      if not ts.eof then '' 查詢數據庫是否有此用戶的登陸過的信息
      OLtime=ts("OLtime")
      OLip=ts("OLip")
      if OLip1<>OLip and DateDiff("s",OLtime,now()) < maxTime then 
      ''上句判斷如果提交登陸用戶ip不是數據庫中最后紀錄的用戶ip并且
      ''用戶的最后活動時間和當前時間相隔并沒超過規定的秒數則確認此用戶當前在線
      Response.Write "<a href=javascript:history.go(-1)>此用戶目前在線,你無法從其他地方登陸此賬號!</a>"
      Response.End()
      else
      ''否則的話判定登陸成功付值給session
      Session("lgName")=userName
      Session("lgPass")=userPass
      Response.Redirect "loginOK.asp"
      Response.End
      end if
      else
      ''如果數據庫沒有次登陸用戶紀錄則執行下面的語句
      Dim ls
      Set ls=Server.CreateObject("ADODB.RECORDSET")
      ls.Open"Select * From onlyLogin",CONN_TOL8,2,2
      ls.ADDNEW
      ls("OLname")=userName
      ls("OLip")=OLip1
      ls("OLtime")=NOW()
      ls.UPDATE
      ls.Close
      Set ls=Nothing
      ''判定登陸成功付值給session
      Session("lgName")=userName
      Session("lgPass")=userPass
      Response.Redirect "loginOK.asp"
      Response.End
      end if
      End Sub %>


      登陸成功后葉面會跳轉到loginOK.asp 

      <style type="text/css">
      <!--
      body {background-color: #FF9900;}
      -->
      </style>
      <% IF Session("lgName")<>"" then %>
      您登陸成功了!!!下面是潛入網頁內的iframe為的是在規定的時間刷新網頁向服務器報告你是否在線
      為了便于區分,frame網頁我們采用了白色作為底色
      <iframe border=0 name=new_date marginwidth=0 framespacing=0 marginheight=0 src="loginFrame.asp" 
      frameborder=0 noResize width=100 scrolling=no height=30 vspale="0"></iframe> 
      <% else %>
      您沒有登陸哈
      <% end if %>


      下面要做的是loginFrame.asp 

      <!--#include file="loginCONN.ASP" -->
      <% CONN_TOL8.Execute("Update onlyLogin Set OLtime=''"& NOW() & "'' where OLname = '' "& Session("lgName") & "''") %>
      <html><head><meta http-equiv="refresh" content="<%=(maxTime-5)%>; url=""></head></html>


      到此為止程序就完成了,這個程序的關鍵就是判定用戶是否在線
      相關教程
      江苏快3 宿州 | 亳州 | 马鞍山 | 蓬莱 | 寿光 | 毕节 | 廊坊 | 玉树 | 金昌 | 吉林长春 | 烟台 | 内江 | 衢州 | 海南海口 | 株洲 | 宜昌 | 安顺 | 平潭 | 青海西宁 | 甘肃兰州 | 简阳 | 和田 | 池州 | 九江 | 定州 | 枣庄 | 仁怀 | 金昌 | 新余 | 日照 | 晋江 | 桓台 | 赤峰 | 克孜勒苏 | 正定 | 巴中 | 黑龙江哈尔滨 | 清徐 | 海南海口 | 图木舒克 | 乌兰察布 | 陵水 | 涿州 | 燕郊 | 莱芜 | 丹阳 | 三明 | 塔城 | 清远 | 伊犁 | 湖州 | 安康 | 汉中 | 临海 | 亳州 | 池州 | 沛县 | 海西 | 海东 | 文山 | 牡丹江 | 延安 | 池州 | 陕西西安 | 深圳 | 阜阳 | 东方 | 黄山 | 宿州 | 公主岭 | 姜堰 | 新疆乌鲁木齐 | 无锡 | 商丘 | 陕西西安 | 兴化 | 阜阳 | 扬州 | 怀化 | 来宾 | 佛山 | 桓台 | 吉林长春 | 内江 | 南平 | 慈溪 | 商洛 | 馆陶 | 绍兴 | 馆陶 | 江西南昌 | 临沧 | 保亭 | 鸡西 | 淮安 | 海丰 | 玉环 | 吴忠 | 西藏拉萨 | 单县 | 黔东南 | 扬州 | 庆阳 | 象山 | 东营 | 平凉 | 营口 | 东台 | 白银 | 泗洪 | 汕尾 | 荣成 | 广州 |