【问题标题】:asp.net String not retained on postback回发时未保留 asp.net 字符串
【发布时间】:2010-11-09 10:15:34
【问题描述】:

我正在尝试创建以下场景...

  • 用户通过输入其用户 ID 和密码登录。
  • 如果他们没有为他们的登录详细信息分配电子邮件地址,则需要先提交一个电子邮件地址,然后才能继续。
  • 然后他们继续以登录状态访问主页。

我遇到的问题是提交电子邮件地址时没有保留用户名和密码,因此登录失败。

这是代码...

Dim userid as String
Dim password as String

Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)

end sub


Sub Page_Transfer()

Dim userLookup As mySource.myData = New mySource.myData()
Dim drSet1 As DataSet = userLookup.xyz("SELECT * FROM OPENQUERY (myDatabase,' SELECT userid, password, email1 FROM userInfo WHERE userid = ''" & userid & "'' AND password = ''" & password & "'' ') ")

If drSet1.Tables(0).Rows.Count < 1 Then
    'Invalid Bond number
    Page.ClientScript.RegisterClientScriptInclude("loginError", "scripts/loginError.js")
Else

        If drSet1.Tables(0).Rows(0).Item("email1") = "" Then
            'No email address
            Page.ClientScript.RegisterClientScriptInclude("emailAddressSubmit", "scripts/emailAddressSubmit.js")
        Else

            response.redirect("home.aspx")

        End If

End If

End Sub


Sub Submit_Email(sender As Object, e As System.Web.UI.ImageClickEventArgs)

'script to add email address to database
'this is where the strings are losing their values

Page_Transfer()

End Sub


Sub Submit_login(sender As Object, e As System.Web.UI.ImageClickEventArgs)

userid = Trim(useridfield.text)
password = Trim(passwordfield.text)

Page_Transfer()

End Sub

有什么想法吗?

【问题讨论】:

  • 你从哪里得到 drSet2?
  • 对不起...在简化代码时遗漏了一点。不过现在应该一切都好
  • 请务必了解有关 SQL 注入的知识!
  • OT:注意 SQL 注入。
  • 是的……我已经在处理 SQL 注入的问题了……只是还没有到位。不过谢谢

标签: asp.net vb.net string


【解决方案1】:

问题在于,每次回发时,页面都会经历一个全新的生命周期。这意味着您在一次回发期间设置的页面的任何实例变量都会在下一次回发中丢失。

如何解决这个问题?您有以下选择:

  1. 再次从控件中读取用户 ID 和密码(用户 ID 字段和密码字段)。由于 ASP.NET 控件在回发后使用视图状态来保留其值,因此这些控件中的值应该仍然有效。

  2. 自己使用视图状态来保存变量的值,即替换

    Dim userid as String 
    Dim password as String 
    

    Protected Property userid As String
        Get
            Return DirectCast(Me.ViewState("userid"), String)
        End Get
        Set
            Me.ViewState("userid") = value
        End Set
    End Property
    ' same for password
    

    但请注意,视图状态并不安全,即它可以由 Web 应用程序的熟练用户修改。因此,在为它们分配邮件地址之前,请务必再次验证用户 ID 和密码的值(检查数据库以查看它们是否匹配)。 (顺便说一下,选项 1 也是如此。)

  3. 将值保存在其他位置,例如Session

【讨论】:

  • 问题在于您的第一个选项密码字段不保留该值,因为它是一个密码字段。 - 第二个选项可以工作 - 第三个我试图避免设置不必要的会话,但它确实有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
相关资源
最近更新 更多