使用会话与静态类保存用户数据

Car*_*ito 5 c# asp.net session

我正在一个带有 C# 后端的 ASP.NET 网站上工作。De webserver 运行在远程服务器上,因为我需要位于客户端 pc 上的一些数据(例如:用户 ID),我编写了一个客户端和服务器应用程序。因此,当用户启动客户端应用程序时,它连接到网络服务器但尚未加载页面,网络服务器启动我的服务器,要求客户端提供一些数据。客户端响应后,服务器拥有所需的数据,并为客户端加载网页。

为了轻松访问用户的某些属性,我想使用 Session 变量。但是当客户端将其数据发送到服务器时,Session 变量尚不可用。当我尝试访问它时,我得到一个 NullReferenceException。我相信这是因为 Application_AcquireRequestState 事件尚未触发(位于 Global.asax.cs)。因为我需要使用客户端的数据,所以我把它保存在一个静态类中,这样我就可以随时轻松访问它。

有没有更好的解决方案?我想到了等待 Application_PostAcquireRequestState 事件触发,因为我认为 Session 变量在那个时候是可用的。这样我就可以将静态类中的数据加载到用户的会话变量中。这是一个好主意,还是我应该坚持当前的情况(静态类)?因为它有效,但感觉这不是最好的方法。

提前致谢!

Ada*_*rth 4

会话状态对于每个用户会话数据来说已经足够好了。

不要接触静态数据,这些静态数据的范围仅限于进程中的每个 AppDomain。IIS 会在您不知情的情况下回收 AppDomain,对您的静态变量进行分类。

更新:为了清楚起见,以下问题/答案解释了 Session 将为空的情况:

如果当前 ASP.NET 会话为空怎么办?

如果您的应用程序属于上述情况之一,这显然会使会话状态不适合。