在ASP.NET裏面要記錄線上使用者與線上人數的作法很多
這個做法供大家參考看看…

一。先建一個線上user的singleton
(有些會用application來記錄,小弟在這邊用singleton…)


Public Class OnLineUser

    Private Shared myInstance As OnLineUser
    Private al_online_user As ArrayList ' 線上使用者
    Private Sub New()
        al_online_user = New ArrayList ' 目前線上使用者
    End Sub

    Public Shared Function GetInstance() As OnLineUser
        If myInstance Is Nothing Then myInstance = New OnLineUser
        Return myInstance
    End Function

    ' 取得目前線上的User
    Function GetOnLineUsers() As ArrayList
        Return Me.al_online_user
    End Function
    ' 登錄線上使用者(上線)
    Sub AddOnLineUser(ByVal login_user As String)
        If al_online_user.IndexOf(login_user.Trim) < 0 Then 
            al_online_user.Add(login_user.Trim)
        End If
    End Sub 
    ' 移除線上使用者(下線)
    Sub RemoveOnLineUser(ByVal login_user As String)
        If al_online_user.IndexOf(login_user.Trim) >= 0 Then 
            al_online_user.Remove(login_user.Trim)
        End If
    End Sub
End Class

二。[登入]使用者登入的訊息寫在Session裏面供time out時驗證用。

請在登入成功後的程式碼中加入…

Session("LoginUser") = "湯瑪的吳"
' 註冊登入者
CacheData.GetInstance.AddOnLineUser(Session("LoginUser").value)

三。[登出]在Global.asax的Session_End事件中,
將session time out 的user給登入!!!


Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
   ' 於工作階段結束時引發
    Try
        ' 使用者登出系統(thoams,2005.11.28)
        Dim session_id As String = Session.SessionID  ' 這一行要加哦,沒加就怪怪的
        Dim logout_user As String = Session("LoginUser").value
        CacheData.GetInstance.RemoveOnLineUser(logout_user)
   Catch ex As Exception
        If Not Session("LoginUser") Is Nothing Then Session("LoginUser") = Nothing
    End Try
End Sub

四。[程式中取得相關訊息]取得目前線上人數或是線上使用者

1.線上人數
CacheData.GetInstance.GetOnLineUsers.Count() ' 線上人數

2.線上使用者
Dim en_CourseData As IEnumerator = CacheData.GetInstance.GetOnLineUsers().GetEnumerator
Dim users As String
While en_CourseData.MoveNext
    users+= CStr(en_CourseData.Current()) & "。"
End While

' 希望對大家有幫助


arrow
arrow
    全站熱搜

    湯瑪的吳 發表在 痞客邦 留言(3) 人氣()