2010-11-09 45 views
0

我想创建以下情形......asp.net字符串未滞留在回发

  • 用户通过将自己的用户ID和密码登录英寸
  • 如果他们没有分配给他们的登录详细信息的电子邮件地址,他们会被要求提交一个,然后才能继续。
  • 然后,他们继续以登录状态登录主页。

我遇到的麻烦是用户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 

任何想法?

+0

你在哪里得到drSet2? – WestDiscGolf 2010-11-09 10:18:39

+0

对不起...错过了一些简化代码。现在应该都很好,但 – Tom 2010-11-09 10:23:24

+1

请学习一些关于SQL注入的知识! – Scoregraphic 2010-11-09 10:23:50

回答

3

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

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

  1. 再次从控件(useridfield和passwordfield)中读取用户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应用程序的熟练用户进行修改。因此,请确保在为其分配邮件地址之前再次验证用户标识和密码的值(检查数据库以查看它们是否匹配)。 (顺便提一下,选项1也是如此。)

  3. 将值保存在其他地方,例如在Session中。

+0

问题出在您的第一个选项,即密码字段不保留该值,因为它是密码字段。 - 第二个选项可以工作 - 第三个我试图避免设置不必要的会话,但它确实工作。 – Tom 2010-11-09 10:29:56