创建特定于ASP.NET会话的全局变量?

时间:2012-05-12 20:52:20

标签: asp.net vb.net session-state global-asax

是否可以为ASP.NET中的每个会话创建一个全局变量?通常我会使用Session:

Session("my_variable") = 10

但是每次我想要使用它时都需要将它投射出来:

Dim my_variable as String = CInt(Session("my_variable"))

我看到如果我创建一个模块,我可以为每个会话创建对整个项目公开的变量......我还看到Global.asax允许模块提供的大部分相同功能。我宁愿避免编写模块......有没有办法在Global.asax或其他一些最佳实践方法中做到这一点?或者Session变量是最好的方式吗?

2 个答案:

答案 0 :(得分:2)

为您的变量创建一个包装类,如下所示

public class SessionVariables
{

  public static int MyVariable
  {
     get{ return if( Session["my_variable"] != null ) (int)Session["my_variable"]; else 0;}
     set {Session["my_variable"] = value;}
   }


}

并使用

SessionVarible.MyVariable = 7;

int p =  SessionVarible.MyVariable + 3;

答案 1 :(得分:1)

如果您只想在会话范围内存储/检索数据,那么 Session 对象就是您的选择。 HttpModules对于实现与ASP.NET请求管道中的特定点绑定的某些功能非常有用(例如,假设您要添加对身份验证请求的日志记录)。 Global.asax允许你做类似的事情,并且可能足以满足你的目的(只需实现你想要在global.asax中定位的事件)。

如果您担心从对象中装箱/取消装箱,那么我喜欢hkutluay使用隐藏演员的包装类的想法。