gpt4 book ai didi

asp.net - 如何让公共(public)变量(在模块中)不在用户之间共享值(value)

转载 作者:行者123 更新时间:2023-12-04 18:15:35 24 4
gpt4 key购买 nike

我正在使用 Windows/Active Directory 身份验证的 ASP.NET (VB) Web 应用程序

我正在使用一个模块,这样我就可以调用公共(public)子例程和函数以及引用变量,而不必实例化一个新对象来在每个页面上访问它们。

在该模块中,我在整个 Web 应用程序的多个页面中使用了一些公共(public)变量。我最近意识到模块中这些公共(public)变量的值在所有用户之间共享。

目标:
我希望这些全局变量的值特定于单个用户,而不是在所有 session 之间共享,并且我不想在使用该变量的每个页面上实例化一个新的对象/类。

问题:
我不想将值存储在客户端变量中,例如 cookie 或 session 。我希望将值存储在服务器上,但特定于每个客户端/用户。

我唯一能想到的就是设置一个全局集合/字典并使用经过身份验证的用户名存储变量,但是我需要有特定的函数来获取和设置值。虽然这会起作用,但它需要更新应用程序中所有页面上对这些变量的所有引用。

问题示例:
下面的代码显示了我如何在模块中创建公共(public)变量,以及如何从一个页面设置值并在另一个页面上使用。我想继续以同样的方式使用这个变量并在页面之间共享它的值,但是变量的值不需要在用户之间共享。

-- 模块.VB --

Public Module MyMod  
Public myVariable as String = ""
End Module

-- 主页.VB --
  Partial Class _Default  
Sub Page_Load() Handles MyBase.Load()
myVariable = "HELLO WORLD"
End Sub
End Class

-- NEXTPAGE.VB --
  Partial Class _Default  
Sub Page_Load() Handles MyBase.Load()
Response.Write(myVariable)
End Sub
End Class

如果我必须使用我的用户 ID 索引集合解决方案,此应用程序中有很多页面需要手动更新,所以我希望有一种方法可以简单地以不同的方式限定这些变量或禁用共享 session 之间。
提前致谢!

最佳答案

您没有说明变量是否需要在页面往返之间保持不变,或者它们是否只是在每个页面的生命周期中使用。

如果它们没有跨页面持久化,那么最简单的解决方案可能是让所有页面都从基于页面的类继承,然后将值从模块移动到基本页面。这样您就不必更改任何变量引用,只需更改页面继承。

如果您确实想保留这些值,完成上述更改会使实现变得更加容易。然后,您可以将基本页面上的成员变量转换为属性,并将您的用户特定缓存和获取嵌入到 getter 和 setter 中。

例如,而不是:

Public MyVariable As String = ""

你会有类似的东西:
Public Property MyVariable As String
Get
Return GlobalMyVariableCache(UserNameKey)
End Get
Set (Value As String)
GlobalMyVariableCache(UserNameKey) = Value
End Set
End Property

关于asp.net - 如何让公共(public)变量(在模块中)不在用户之间共享值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802850/

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