2016-07-14 55 views
-1

我想知道是否有人可以帮助我,我一直在尝试做的是在工作人员登录后我想保存他们的staff_id,以便它可以用于以下形式以确定他们,我想我应该使用会议,但我有点困惑。这里是我当前的日志表单代码:如何在会话中存储SQL查询的结果

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中。我怀疑这是正确的做法,但我没有其他想法。这是我尝试代码:

私人小组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 
+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()是试图关闭当前的webform?这是一种类似桌面的编码,它不会关闭ASP.NET中的任何内容 - 摆脱它。

  • 确保staffhome.Show()adminhome.Show()按预期工作(即使用Response.Redirect()Server.Transfer()重定向到预期页面)。这听起来就像你试图在ASP.NET中使用类似桌面的代码一样。
  • 的代码是脆弱的SQL注入
相关问题