c# - 使用 Session 与 Static 类来保存用户数据

标签 c# asp.net session

我正在开发一个使用 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/

相关文章:

c# - 判断是数组还是对象

c# - Visual Studio 找不到符号,虽然类在目录中,但它没有出现在解决方案资源管理器中

c# - mvc 应用程序中的表单例份验证,使用外部服务进行身份验证

javascript - 如何通过中继器和数据库中的标记显示 G map

linux - 如果 Linux 中同一用户的两个 session ,文件会发生什么情况

php - mysqli_stmt_num_rows($stmt) 总是返回 0?

c# - 可以将 Exception 放入 EventArgs 中吗?

asp.net - html 编码/解码 - ckeditor

ASP.NET DropDownList 在回发时不保留所选项目

java - 从 session Java 访问数组