【问题标题】:displaying Username using session (ASP.NET)使用会话显示用户名 (ASP.NET)
【发布时间】:2013-02-18 07:43:33
【问题描述】:

我使用 Visual Studio 2010 作为我的 IDE,并使用 Visual Basic 创建一个简单的网站我不知道是否可行,但我可以使用会话将刚刚登录到我的 LoginForm 的用户名显示到其他表单吗?

我理解得不够好,但谁能告诉我,这是在会话中包含值的正确方法吗?如何将其显示到其他表单?

Protected Sub ImageButton1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click
        Dim connect As String = "Provider=Microsoft.ACE.OleDb.12.0;" & _
        "Data Source=C:\Users\cleanfuel\Documents\Visual Studio 2010\Projects\FinalProject4a2p\FinalProject4a2p\bin\DBFinalProject.accdb"
        Dim query As String
        query = "Select Count(*) From tblAccount Where Username = ? And UserPass = ?"
        Dim result As Integer = 0
        Using conn As New OleDbConnection(connect)
            Using cmd As New OleDbCommand(query, conn)
                cmd.Parameters.AddWithValue("", TxtUser.Text)
                cmd.Parameters.AddWithValue("", txtPass.Text)
                conn.Open()
                result = DirectCast(cmd.ExecuteScalar(), Integer)
            End Using
        End Using

        If result > 0 Then
            Response.Redirect("Menus.aspx")
            Session("User") = TxtUser.Text
            Session("Pass") = txtPass.Text
        Else
            Response.Write("<td>")
            Response.Write("<div align=""center"">")
            Response.Write("<font color='white'>")
            Response.Write("Unable to Login, Invalid Username or Password! </font>")
            Response.Write("</div>")
            Response.Write("</td>")
        End If
    End Sub

【问题讨论】:

  • 我认为您应该先将用户名存储在会话中,然后才将他重定向到 menus.aspx
  • 我这样做了,这是我得到的错误:“对象引用未设置为对象的实例。”

标签: asp.net sql vb.net visual-studio-2010 oledb


【解决方案1】:

在您的母版页中设置标签(如果有),将会话中的用户名分配给标签,它将出现在所有页面中。如果您没有母版页,则可以在页面中设置标签(您希望显示用户名),然后将标签 Text 属性设置为会话中的值。

您在会话中存储值的方式是正确的,一旦值存储在会话中,您应该重定向到Menu.aspx,例如:

If result > 0 Then
            Session("User") = TxtUser.Text
            Session("Pass") = txtPass.Text
            Response.Redirect("Menus.aspx")

....

要访问它们,您可以这样做:

labelUserName.Text = Session("User").ToString()

【讨论】:

  • sir Habib 我没有母版页,我应该做同样的过程吗?
  • @Danjor,如果你没有母版页,你可以把标签放在任何你想显示用户名的页面中,像上面一样显示
  • 我有一个错误“对象引用未设置为对象的实例。”这是什么意思?
  • 这意味着您的会话在您访问之前尚未设置。
  • 嗯?这是否意味着它没有从 LoginForm 中获得一些价值?
【解决方案2】:

使用FormsAuthentication,然后您可以简单地在表单上放置一个LoginName 控件,或者从HttpContext.Current.User.Identity.Name 获取用户名

【讨论】:

  • 我是新手,我无法理解您使用的术语。这就像一种专业的方式......
  • 你不明白什么?使用 google 查找有关表单身份验证的教程。
  • 但是我只需要用到sessions,这比sessions好用吗?
  • 是的,使用内置的身份验证功能比使用自己的身份验证功能更容易。
【解决方案3】:

其他用户提供的答案也可以使用,但是我找到了这个并成功得到了我想要的结果。

这是我的代码:

Protected Sub ImageButton1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click
        Dim connect As String = "Provider=Microsoft.ACE.OleDb.12.0;" & _
        "Data Source=C:\Users\cleanfuel\Documents\Visual Studio 2010\Projects\FinalProject4a2p\FinalProject4a2p\bin\DBFinalProject.accdb"
        Dim query As String
        query = "Select Count(*) From tblAccount Where Username = ? And UserPass = ?"
        Dim result As Integer = 0
        Using conn As New OleDbConnection(connect)
            Using cmd As New OleDbCommand(query, conn)
                cmd.Parameters.AddWithValue("", TxtUser.Text)
                cmd.Parameters.AddWithValue("", txtPass.Text)
                conn.Open()
                result = DirectCast(cmd.ExecuteScalar(), Integer)
            End Using
        End Using

        If result > 0 Then
            Dim myCookie As HttpCookie = New HttpCookie("USER")
            myCookie.Value = TxtUser.Text
            Response.Cookies.Add(myCookie)

            Response.Redirect("Menus.aspx")
        Else
            Response.Write("<td>")
            Response.Write("<div align=""center"">")
            Response.Write("<font color='white'>")
            Response.Write("Unable to Login, Invalid Username or Password! </font>")
            Response.Write("</div>")
            Response.Write("</td>")
        End If

    End Sub

我使用 HTTPcookie 而不是 session,因为我无法满足自己,因为它没有显示我想要显示的值,而且它总是一遍又一遍地向我显示相同的错误。

这里是要显示的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If Request.Cookies("USER") Is Nothing Then
            Label7.Text = "No Account Logged In"
        Else
            Dim aCookie As HttpCookie = Request.Cookies("USER")
            Label7.Text = Convert.ToString(Server.HtmlEncode(aCookie.Value))
        End If
    End Sub

【讨论】:

  • 您应该知道客户端可以轻松地欺骗您的 cookie。
  • 恶搞是什么意思?如果我使用 cookie 而不是其他替代代码,会有问题吗?
猜你喜欢
  • 2016-01-19
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2012-12-13
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多