没有cookie和会话的asp.net mvc全局变量[""]

时间:2014-12-09 10:47:00

标签: asp.net asp.net-mvc

在asp.net mvc中是否存在不使用cookie或session [“”]存储全局变量的方法?

我知道cookies和会话[“”]有一些缺点,我想在退出时使用最好的方法。

3 个答案:

答案 0 :(得分:2)

如果它们确实是全局变量,那么您应该实现singleton pattern并且可以全局访问Instance来保存变量。

这是一个简单的例子:

public sealed class Settings
{
    private static Settings instance = null;
    static readonly object padlock = new object();

    // initialize your variables here. You can read from database for example
    Settings()
    {
        this.prop1 = "prop1";
        this.prop2 = "prop2";
    }

    public static Settings Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new Settings();
                }
                return instance;
            }
        }
    }

    // declare your global variables here
    public string prop1 { get; set; }
    public string prop2 { get; set; }
}

您可以在代码中使用它们:

var globalvar1 = Settings.Instance.prop1;

此类及其变量将仅初始化一次(当应用程序启动时),并且它将在您的应用程序中全局可用。

答案 1 :(得分:1)

基本上你有以下选择:

  • Cookie - 只要您设置有效,必须由客户的浏览器允许,可以被用户删除,存储在用户的PC上。
  • 会话 - 对于存储在服务器上的所有请求,而不是单个重定向有效。
  • ViewData - 重定向后将其清除(仅在单个请求期间生效)。
  • TempData - 在阅读了已删除的值后,将短消息发送到视图非常有用。
  • ViewBag - 仅在当前请求期间可用,如果发生重定向,则其值变为空,是动态的,因此您不会有智能感知,并且错误可能仅在运行时发生。

此处 - http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html - 您可以找到描述它们的精彩文章。

答案 2 :(得分:0)

确定:HttpContextBase.Application(无过期)或HttpContextBase.Cache(有效期)。您可以通过Controller类的HttpContext属性访问HttpContextBase实例。