mysql - .Net session ,如何获取数据

标签 mysql .net vb.net session

我有一个名为 login.aspx 的登录页面,它将 Affid 复制到 session 中,并将 Affid 加载到另一个名为仪表板.aspx 的页面上。

我收集 session 并像这样加载它:

登录.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

仪表板.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 查询中我想根据 session 中的数据搜索字段。

最佳答案

ASP.Net session 可以保存任何可序列化的信息,因此正如所指出的,如果需要,您可以在其中存储整个对象,并根据需要检索字段。

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

我们使用一个包装器对象来进行 session 使用,该对象从 HTTPContext 初始化,并确保我们永远不会在子对象中传入或使用任何特定于 Web 的代码,同时仍然允许 session 的整体概念。

所以像这样:

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"),这实际上是我们通过独特的登录过程来管理我们的 session 的方式。本质上,对象原样是只读的,因为没有任何更改被持久化(这就是我们想要的方式),但这可能不是对每个人来说都是最好的。

如果您想要随时更改值,也许更好的方法是实现“同步”方法以将属性存储回 session 。这将处理初始加载以及事后的任何更改。

如果您不需要额外的步骤,您还可以直接在 session 上返回属性。

请参阅上面编辑的方法。

关于mysql - .Net session ,如何获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678847/

相关文章:

c# - NuGet 更新后的 FileLoadException

移动文件时不显示 css

mysql - MySQL 中 SELECT 内的 IF 语句 SQL 查询

php - 从数组中的字符串中删除“

mysql - 我的多边形是否正确插入到数据库中?

c# - 一个excel图表中的两个轴

mysql - 更新 MySQL 中的行,将每隔一个 <p> 替换为 </p>

c# - LinqToSql 引用的实体将抛出 NullReferenceException

c# - 需要帮助将 C# 转换为 VB

vb.net - 多个引用指向同一个字符串?