第一步: 先在系统中创建一个表,这个表用来存储每个用户的ip.
在Application_Start中添加以下代码。
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' 在应用程序启动时运行的代码 Dim dt As DataTable = New DataTable() dt.Columns.Add("UIP", GetType(String)) Dim pk(1) As DataColumn pk(0) = dt.Columns("UIP") dt.PrimaryKey = pk Application("DT") = dt dim count as integer=0 Application("count")=count End Sub
第二步:
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) ' 在新会话启动时运行的代码 Dim ip As String = Request.ServerVariables("REMOTE_ADDR").ToString '获取客户端IP地址 Dim dt As DataTable = Application("DT") If dt.Rows.Contains(uid) Then Application.Lock() Dim Row As DataRow = dt.NewRow() Row("UIP") = uid dt.Rows.Add(Row) Application.Set("DT", dt) dim count as integer=Application("count") count+=1 Application.set("count",count) Application.UnLock() End If End Sub
第三步:
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) Application.Lock() Dim ip As String = Request.ServerVariables("REMOTE_ADDR").ToString Try Dim i As Integer Dim dt As DataTable = Application("DT") Dim len as integer=dt.Rows.Count - 1 For i = 0 To len Dim row As DataRow = dt.Rows(i) If row("UIP").ToString.Equals(ip) Then dt.Rows.Remove(row) Exit For End If Next Application.Set("DT", dt) dim count as integer=Application("count") count-=1 Application.set("count",count) Application.UnLock() Catch ex As Exception End Try End Sub —
最后要在web.config文件中设置
sessionstate 模式设置为 ' InProc ',因为只有设置为InProc才会触发Session_End