我是新手。我有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。所有这些表都在后端并有数据,但问题是我缺乏知识。 如何使会话中包含不同的变量。
答案 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。然后你可以把它从会话中删除,投射它,并直接访问你对象的属性(用户名/电子邮件/其他)。