gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:56:55 24 4
gpt4 key购买 nike

我有一个名为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com