如何在会话中存储SQL查询的结果

时间:2016-07-14 22:26:42

标签: asp.net vb.net

我想知道是否有人可以帮助我,我一直想要做的是在一名工作人员登录后我想保存他们的staff_id所以它可以用于以下表格来识别他们,我想我是应该使用Session但我有点困惑。这是我当前的登录表单代码:

Private sql As New sqlcontrol
Private AuthUser As String

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

    If sql.HasConnection = True Then
        If IsAuthenticated() = True Then
            AuthUser = tbUsername.Text
            MsgBox("login successful")

            sql.RunQuery("SELECT staff_level FROM staff WHERE staff_username ='" & tbUsername.Text & "'")

            If sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 1 Then
                staffhome.Show()
                Me.Close()
            ElseIf sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 2 Then
                adminhome.Show()
                Me.Close()
            End If
        End If
    End If
    'pressing this button checks database for users
End Sub

Private Function IsAuthenticated() As Boolean

    'clear existing records
    If sql.sqldataset IsNot Nothing Then
        sql.sqldataset.Clear()
    End If

    sql.RunQuery("SELECT Count(staff_username) As UserCount FROM staff WHERE staff_username ='" & tbUsername.Text & "' AND staff_password='" & tbPassword.Text & "' COLLATE SQL_Latin1_General_CP1_CS_AS ")

    If sql.sqldataset.Tables(0).Rows(0).Item("UserCount") = 1 Then
        Return True
    End If

    MsgBox("Invalid Username or Password.", MsgBoxStyle.Critical, "LOGIN FAILED")
    Return False
    'function checks whether username and password combination exists in database
End Function

由于我没有得到任何回复,我认为我应该添加我尝试过的内容,我尝试创建一个运行查询的子服务器以获取用户staff_id然后将查询结果保存到变量中然后通过修改我的其他功能保存到Session。我怀疑这是正确的做法,但我没有其他的想法。这是我尝试过的代码:

Private Sub storeid()

   sql.RunQuery("SELECT staff_id FROM staff where username= " & tbUsername.Text & "")

    System.Web.HttpContext.Current.Session("staffid") = sql.sqldataset.Tables(0).Rows(0).Item("staff_id")
End Sub

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试重新发明轮子,即表单身份验证

  

ASP.NET成员资格和ASP.NET登录控件提供了一层   抽象表单身份验证并替换大部分或全部   通常需要做的工作才能使用表单身份验证。

阅读this article并尝试在项目中关注它,将代码放在登录页面的Logon_Click()。之后,一旦经过身份验证,ASP.NET应该创建一个可以在整个应用程序中使用的用户会话(即不需要自定义IsAuthenticated(),因为您可以使用User.Identity.IsAuthenticated属性。)

关于您的代码:

  • 如果您没有看到任何输出,可能是因为您 不要验证所有可能的情况,例如

    如果HasConnection = false会发生什么?

    If sql.HasConnection = True Then
    ...
    End If
    

    你没有输出。

    如果staff_level为NULL会发生什么?

    If sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 1 Then
       staffhome.Show()
       Me.Close()
    ElseIf sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 2 Then
       adminhome.Show()
       Me.Close()
    End If
    

    你没有输出。

  • Me.Close()试图关闭当前的网络表单?它是类似桌面的编码,它不会在ASP.NET中关闭任何东西 - 摆脱它。

  • 确保staffhome.Show()adminhome.Show()按预期工作(即使用Response.Redirect()Server.Transfer()重定向到预期的网页)。这听起来就像你尝试在ASP.NET中使用类似桌面的编码一样。
  • 代码易受sql注入攻击