我正在开发一个使用 C# 后端的 ASP.NET 网站。 De webserver 在远程服务器上运行,因为我需要位于客户端 pc 上的一些数据(例如:用户 id),我编写了一个客户端和服务器应用程序。因此,当用户启动客户端应用程序时,它会连接到网络服务器但尚未加载页面,网络服务器会启动我的服务器,向客户端请求一些数据。客户端响应后,服务器拥有所需的数据并为客户端加载网页。
为了方便地访问用户的一些属性,我想使用 Session 变量。但是当客户端将其数据发送到服务器时,Session 变量还不可用。当我尝试访问它时,我得到一个 NullReferenceException。我相信这是因为 Application_AcquireRequestState 事件尚未触发(位于 Global.asax.cs 中)。因为需要用到客户端的数据,所以我把它保存在一个静态类中,方便随时访问。
有更好的解决方案吗?我想到等待 Application_PostAcquireRequestState 事件触发,因为我认为 Session 变量在那个时候是可用的。这样我就可以将静态类中的数据加载到用户的 session 变量中。这是个好主意,还是我应该坚持目前的情况(静态类)?因为它有效,但感觉并不是执行此操作的最佳方法。
提前致谢!
最佳答案
session 状态对于每个用户 session 数据来说已经足够好了。
不要触及静态,这些是进程中每个 AppDomain 的范围。 IIS 将在您不知情的情况下回收 AppDomain,将您的静态变量装箱。
更新:为了清楚起见,以下问题/答案解释了 Session 将为空的情况:
What should I do if the current ASP.NET session is null?
如果您的应用程序属于上述情况之一,这显然会使 session 状态不适合。
关于c# - 使用 Session 与 Static 类来保存用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8741164/