跟踪每个用户会话的数据表检查

时间:2018-10-15 16:44:42

标签: asp.net .net vb.net

我有一个.NET(vb.net)4.6网站应用程序,该应用程序跟踪整个大学中用户的机密。有些秘密比其他秘密更重要。

因此,为了跟踪所有用户的安全性,我不断地对自己编写的类进行检查,该类检查值以确保它们正确。

因此,许多网页都实例化了一个名为SecretChecker的类,如下所示:

Public isSecure As SecretChecker

isSecure = New SecretChecker(ds)

实例化后,SecretChecker会检查所有用户机密(可能在1000秒钟之内),并按如下方式检查它们: SecretChecker.vb:

Public Sub New(ByVal secretDataSet As DataSet)

    Public userSecretsList As DataTable = Nothing

    userSecretsList = secretDataSet.Tables("userSecretsList")

    With userSecretsList .Rows(0)
        currentUserID = .Item(0)
    End With

    Dim tempList As DataTable = userSecretsList .Copy

    If IsCurrentUser(currentUserID) Then
        For Each dr As DataRow In tempList.Rows
            secretID = dr("secretID")
                If IsSecretForever(secretID) 
                    dr("isSecretForver") = 1
                    dr.AcceptChanges()
                End If

                If IsLimitedLifetime(secretID)
                    dr("isSecretLimited") = 1
                    dr.AcceptChanges()
                End If
        Next

        tempList.AcceptChanges()
        userSecretsList = tempList
    End If

End Sub

所以这实际上可以正常工作。但是,如果我有20多个用户,则Web服务器开始陷入瘫痪,最终不堪重负,用户开始看到连接错误。

我认为真正的问题是For / Next循环。

我认为最好不要在每次使用此类时都遍历数据表。

实际上,我认为最好是在用户登录时检查一次,然后以某种方式将其保存在内存中。

因此,即使我当前的方法可行,我仍然认为效率很低。

是否有一种方法可以让Web应用程序知道当前用户已经检查过数据表,以便在我实例化该类时,它不会每次都通过For / Next循环运行?

谢谢!

0 个答案:

没有答案