当我从一个页面移动到另一个页面时,我需要一个会话变量来从一个页面更改为另一个页面

时间:2010-02-02 20:04:13

标签: vb.net session asp.net

我是新手。我有4页。 login.aspx,account.aspx,settings.aspx和fliers.aspx。 它全部用vql.net编程,带有sql server后端。 在我的第一页,login.aspx我在.vb页面中有这个代码 -

Dim SQL As String = "SELECT * FROM table1 WHERE email='" + Me.txtUserName.Text + "' AND password='" + Me.txtPassword.Text + "' "
ExecuteNonQuery(SQL)
SqlCmd = New SqlCommand(SQL, SqlCnn)
SqlDR = SqlCmd.ExecuteReader
If SqlDR.HasRows Then
    Do While SqlDR.Read()
        Label1.Text = "successfully logged in"
        Dim webUser As New webUser(SqlDR("email"), Session.Item("sqlcnn"))
        Session.Item("webUser") = webUser
        isValidUser = True
    Loop
Else
    Label1.Text = "Failed to login"
End If

你可以看到它需要session.item(“webuser”)作为电子邮件。这个页面很好。在下一页是account.aspx,它需要用登录用户的ID替换电子邮件,在settings.aspx页面中,它需要用该用户的配置文件ID替换用户的id。所有这些表都在后端并有数据,但问题是我缺乏知识。 如何使会话中包含不同的变量。

3 个答案:

答案 0 :(得分:1)

让人惊讶。您的代码存在巨大的安全问题:

SQL注入攻击 http://msdn.microsoft.com/en-us/library/ms998271.aspx

此外,您应该使用成员资格提供程序和基于表单的身份验证: http://support.microsoft.com/kb/301240

最后,要设置会话值,只需说出Session( "Value Name" ) = value

答案 1 :(得分:0)

reiut考虑摆脱内联sql并使用exec。查看存储过程并使用命令对象传递参数。密码也不应存储为纯文本。

至于会话,它们只是可以在page_load事件中更改的变量。

例如,

会话(“FirstName”)=“Jon”

会话FirstName具有值Jon。只需重置它就可以在另一个aspx页面中轻松更改:

在另一页:

会话(“FirstName”)=“黎明”

尝试一下。

答案 2 :(得分:0)

最好的方法是创建一个类对象(在您从@Nissan Fan读取链接并开始使用某种安全身份验证之后)并将序列化类对象存储到会话中。您的类对象应该继承System.Security.Principal.GenericIdentity类或至少实现IIdentity。然后你可以把它从会话中删除,投射它,并直接访问你对象的属性(用户名/电子邮件/其他)。