我想知道是否有人可以帮助我,我一直想要做的是在一名工作人员登录后我想保存他们的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
答案 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中使用类似桌面的编码一样。