我有两种形式;一个用于登录,另一个用于更改密码。我使用Microsoft Access数据库作为后端。我使用查询构建器创建了登录表单。
密码被更改,但是当我尝试使用新密码登录时,它会拒绝密码。如果我关闭应用程序并重新打开它,新密码将起作用。 我希望它能够立即更新,以便我可以使用更新的密码,而无需关闭应用程序。
这是更改密码的代码:
Dim conn As New OleDb.OleDbConnection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Bus ticketing-5th sem\WindowsApplication3\bus.mdb"
Try
Dim cmd As New OleDbCommand("select [PASSWORD] from login where USERNAME=? ", conn)
If conn.State = ConnectionState.Open Then conn.Close()
conn.Open()
Dim i As Integer
i = MsgBox("Are You Sure Update Selected Record ?", MsgBoxStyle.OkCancel)
If (txtnpass.Text <> txtconpass.Text) Then
MsgBox("Password mismatching")
Else
cmd.CommandText = "UPDATE login SET [PASSWORD]='" & txtnpass.Text & "' WHERE [USERNAME]='" & txtusername.Text & "'"
cmd.ExecuteNonQuery()
''Call busDataSet()
Call Reset()
MsgBox("Record Updated Successfully", MsgBoxStyle.Information)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
这是使用查询构建器的登录表单的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim login1 = LoginTableAdapter.UserPasswordString(USERNAMETextBox.Text, PASSWORDTextBox.Text)
If login1 Is Nothing Then
MessageBox.Show(" CHECK USERNAME OR PASSWORD ", "Authentication Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
MsgBox(" WELCOME ADMIN! ", MsgBoxStyle.Information, " SUCCESSFULLY LOGGED IN ")
Form9.Show()
Me.Hide()
End If
End Sub
答案 0 :(得分:0)
这里的问题是您没有重置表单,这意味着PASSWORDTextBox
&amp; USERNAMETextBox
( 可怕的 变量命名方案,顺便说一下!)是相同的&amp;因此,LoginTableAdapter.UserPasswordString
包含与之前相同的变量(即在重置之前使用的密码)。
要解决此问题,您需要使用[formName].Refresh()
刷新登录表单,以便清除任何“缓存”状态。存储在表单中的登录详细信息等数据。如果您还没有,那么您也应该清除用户名&amp;加载或取消隐藏登录表单时的密码字段(又称OnLoad
&amp; Close
事件)。
另一个问题是您没有保护您的密码,而是以明文形式发送和存储在数据库中。 现在,这种方法存在两个问题:
您需要使用算法(I recommend SHA,MD5 can be used but is not recommended)哈希您的密码。您也应该是sanitizing the inputs that are sent to the database,因为攻击者可以使用无辜的TextBox
轻松销毁数据库中保存的所有数据。这叫做SQL注入&#39;并且非常讨厌。
散列的工作方式是在数据库中存储密码的散列版本,然后程序在密码TextBox
中创建密码的散列,&amp;将它与数据库中保存的数据进行比较。如果哈希值匹配,则密码匹配。哈希只是单向的;它们无法解密。
不保护带有哈希值的密码可能会破坏数据保护法,因此如果您最终走下 not 散列密码的危险路径,请务必小心。