[mysql].Net 会话如何获取数据

发布时间: 2017/4/4 15:17:37
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个名为 login.aspx 将 affid 复制到一个会话,并装载在名为 dashboard.aspx 的另一个页面上 affid 的登录页面。

我收集会话并加载它像这样︰

Login.aspx:

MysqlConn.Open()
            Dim Query As String
            Query = "select * from mdxmain.taffiliate where affID = '" & username.Text & "' and affPassword = '" & password.Text & "'"
            COMMAND = New MySqlCommand(Query, MysqlConn)
            Session("affID") = username.Text

dashboard.aspx:

Dim userid As String = HttpContext.Current.Session("affID")
        If (userid Is Nothing) Then
            Response.Redirect("login.aspx")


    End If

Dim c As New MySqlConnection("Server=test;Database=test;UID=test;PWD=test;")
        c.Open()
        Dim com As New MySqlCommand("SELECT AffID FROM toutcome WHERE affID = '" & CType(Session.Item("affID"), String) & "'", c)
        Dim myReader As MySqlDataReader = com.ExecuteReader(CommandBehavior.CloseConnection)
        myReader.Read()
        affiliateid.Text = myReader.Item(0).ToString()

        myReader.Close()

问题是,它只从数据库收集"affid",我有我想要使用的多个领域。如何加载所有字段以便我可以使用他们?所以在 mysql 查询中我想搜索基于会话中的数据字段。

解决方法 1:

ASP.Net 会话可以容纳任何可序列化的信息,所以当指出你可以存储整个对象在它如果你想要的和检索所需的字段。

话虽如此,我会告诫太多敏感信息 (如密码) 存储在会话中,因为这通常是一种反模式,这样做。

我们为我们的会话使用,初始化了从 HTTPContext,并确保我们永远不会在传递或同时仍然允许对会议的总体概念在我们的子对象中使用任何 web 特定代码使用一个包装对象。

所以这样的事情︰

Public Class UserSession

    Public Property UserName as String = String.Empty

    Public Sub New(context as HTTPContext)
        ...
        Me.Username = CStr(context.Session("UserName"))
    End Sub

    Public Sub Synchronize(context As HTTPContext)
        ....
        context.Session("UserName") = Me.Username
    End Sub

End Class

并登录您现在可以将其更改为︰

Dim us = New UserSession(HttpContext.Current)

MysqlConn.Open()
Dim Query As String
Query = "select * from mdxmain.taffiliate where affID = '" & username.Text & "' and affPassword = '" & password.Text & "'"
COMMAND = New MySqlCommand(Query, MysqlConn)

us.UserName = username.Text
... Set any other properties you need ...
us.Synchronize(HttpContext.Current)        

然后在页面上你只是执行︰

Dim us = New UserSession(HttpContext.Current)

DoStuff(us.UserName)

编辑︰ 我刚刚意识到,我真的没有给你如何最初设置的属性的详细信息。你可以两种方式之一。

一个是做它就像你是在你的例子 (Session("SomeKey") ="SomeValue"),其实是我们如何管理我们由于独特的登录过程。基本上是作为对象-是只读,因为没有更改保持 (和这是我们想怎样) 但这可能不是最适合每个人。

也许更好的方式,如果你会想要更改的值,当您去将实现"同步"方法存储回会话的属性。这将事后处理初始加载和任何的变化。

你也可以给属性直接在本届会议上如果你不想要额外的步骤。

请参阅上面的编辑的方法。

官方微信
官方QQ群
31647020