2013-02-18 52 views
1

我正在使用Visual Studio 2010作为我的IDE并使用​​3210创建一个简单的网站我不知道是否有可能,但是我可以使用会话显示刚登录到我的LoginForm的用户名到其他表单?显示用户名使用会话(ASP.NET)

我不是不够好理解,但谁能告诉我,这是包含在会话中值的正确方法?我怎样才能显示它的其它形式?

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 
+0

我认为你应该先在会话存储的用户名,然后才重定向他menus.aspx – AMember 2013-02-18 07:46:20

+0

我做到了,这是错误,我得到:“对象引用未设置为对象的实例。” – Danjor 2013-02-18 08:00:48

回答

0

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

这里是我的代码:

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因为我不能满足自己,因为它并没有显示我想要显示的值,它总是显示我同样的错误一遍又一遍地。

这里的代码显示:

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 
+1

你应该知道客户可以很容易地欺骗你的cookie。 – Joe 2013-02-19 08:15:19

+0

你是什么意思的恶搞?如果我使用cookie而不是其他备用代码,是否有问题? – Danjor 2013-02-20 14:40:46

2

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

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

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

.... 

并访问他们,你可以这样做:

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

抱歉,我没有注意到它! >。<谢谢我会试试.... – Danjor 2013-02-18 07:57:39

+0

sir Habib我没有Master Page,我应该做同样的过程吗? – Danjor 2013-02-18 08:00:16

+0

@Danjor,如果你没有一个母版页,则可以把标签在任何页面的要显示的用户名,并显示它像上面 – Habib 2013-02-18 08:01:02

2

使用FormsAuthentication,那么你可以简单地把一个LoginName控制窗体上,还是从获取用户名HttpContext.Current.User.Identity.Name

+0

我是新手,我不明白,你已经使用的术语。这就像一个专业的方式... – Danjor 2013-02-18 08:03:36

+0

你不明白什么?使用谷歌查找窗体身份验证教程。 – Joe 2013-02-18 08:04:30

+0

但我只需要使用会话,这比会话更容易使用? – Danjor 2013-02-18 08:06:02