Asp.net mvc 3 如何在用户登录时设置全局变量?

Asp.net mvc 3 如何在用户登录时设置全局变量?,asp.net-mvc-3,Asp.net Mvc 3,我需要在用户登录时设置一个全局变量。我需要能够使用控制器和视图访问此变量 我目前正在使用内置的MVC成员资格提供程序 用户不能以任何方式编辑此变量 我尝试过使用会话,但该会话在某个点过期,而用户仍在登录 还有其他选择吗 如果出于安全考虑,您可以使用会话cookie和加密值。还可以查看应用程序对象,它对于正在运行的应用程序是全局的,而不是作为会话对象的每个用户。我为自己的需要而采用的一种技术是创建一个继承控制器的BaseController,然后让我的各个控制器继承它。在BaseControlle

我需要在用户登录时设置一个全局变量。我需要能够使用控制器和视图访问此变量

我目前正在使用内置的MVC成员资格提供程序

用户不能以任何方式编辑此变量

我尝试过使用会话,但该会话在某个点过期,而用户仍在登录


还有其他选择吗

如果出于安全考虑,您可以使用会话cookie和加密值。还可以查看应用程序对象,它对于正在运行的应用程序是全局的,而不是作为会话对象的每个用户。

我为自己的需要而采用的一种技术是创建一个继承控制器的BaseController,然后让我的各个控制器继承它。在BaseController中,我放置了通过BaseController构造函数设置的全局变量。然后,所有控制器操作都可以访问此变量,并根据需要将其提供给其他视图、模型。在我的情况下,它运行得很好。

这个主意很有趣。我需要全局化的值来自数据库。BaseController会在每次我需要使用继承它的控制器时从数据库中获取它吗,还是每次会话/登录只获取一次?@Nanek-如果你在BaseController中创建了一个静态属性,我相信你会得到的是,每个控制器都可以访问该值,并且能够,这取决于你的实现,要更改它,请打开两个浏览器并共享,至少在我的开发环境中是这样的。那可能不是你想要的。将BaseController的构造函数设置为静态而不是受保护的构造函数意味着它只被调用一次。如果您不需要/不想继续从DB获取DB,您当然可以在其中加入一些逻辑,以避免点击DB。@Nanek-如果您有一个受保护的BaseControler构造函数,那么它将为派生控制器类的每个实例化调用一次。可能不太理想,很好。我需要访问User.Identity.Name-BaseController没有此权限。为什么?