到目前为止,我一直在使用会话将一些变量从一个页面传递到另一个页面.例如用户角色.当用户登录到Web应用程序时,用户的角色ID保持在会话中,并且在应用程序的不同部分判断该角色.我最近开始思考为什么不使用静电会员.我可以将相同的信息存储在静电字段中,并在我的应用程序中的任何位置轻松地访问它(当然,只要包含静电字段所在的名称空间).我知道使用会话变量有时很方便,因此:

  1. 任何类型的数据都可以存储在会话中.但是,静电字段只接受数据类型正确的数据.
  2. 会话变量将在特定时间后过期,这是我们在许多情况下需要的行为.

除了上面提到的,还有什么其他原因不应该使用静态字段来存储数据并使其在任何地方都可用?

推荐答案

不,使用静态变量是最好的 Select :

  • 如果你的应用域名被回收,你所有的静电变量都将被"重置"
  • 静态变量不会水平扩展——如果你平衡应用程序的负载,一个用户点击一个服务器,那么另一个用户就不会在第一个服务器的静态变量中看到数据存储
  • 最重要的是,静电变量将由all个访问该服务器的用户共享…它根本不会是以每个用户为基础的…而从您的描述来看,您不希望用户X看到用户Y的信息.

基本上,围绕应用程序传播信息有两种 Select :

  • 将其保留在客户端,这样每个请求都会提供前面步骤中的信息.(对于大量信息,这可能会变得很笨拙,但对于简单的情况可能会很有用.)
  • 保持它在服务器端,最好是以persistent种方式(例如数据库)运行,客户端提供会话标识符.

If您可以使用负载平衡让所有用户访问同一服务器,if当AppDomain重新启动1或服务器宕机时,您不介意丢失会话,您可以将其保存在内存中,按会话ID键控.但是要小心.


1ASP中可能存在机制.NET将会话信息从一个AppDomain传播到另一个AppDomain——我不确定

Asp.net相关问答推荐

Visual Studio发布的网站得到错误类型JObject is not defined when page is load on server"''"

DataTables-如何修改来自JSON响应或其他DataTables参数的无结果(ZeroRecords)消息

如何根据另一个下拉列表中的 Select 从下拉列表中删除一个值?

ASP .Net Web API 将图像下载为二进制

iframe.readyState 在 chrome 中不起作用

IIS 将旧用户名返回到我的应用程序

ASP.NET - AppDomain.CurrentDomain.GetAssemblies() - AppDomain 重新启动后缺少程序集

用于 ASP.NET 的 System.Drawing 的替代品?

有没有办法在外部 javascript 文件中使用<%= someObject.ClientID %>?

无法加载文件或程序集'System.Web.WebPages.Razor,版本 = 3.0.0.0

使用 JavaScript 禁用 ASP.NET 验证器

IIS 7.5 上没有 asp.net 功能

IIS 中的 existingResponse="PassThrough" 是什么意思?

跟踪点有什么用途?

测试 Web 表单应用程序 (ASP.NET) 的最佳方法是什么

如何在 ASP.Net 网络表单中使用标签?

带有模型的 ASP.NET MVC 重定向

使用 Twitter Bootstrap 在 @html.actionlink 中显示 html

如何在服务器控件属性中使用 ASP.NET <%= 标签?

System.Drawing.Image.FromFile() 上的内存不足异常