【问题标题】:HTML5 offline storage - Alternative to Session? [closed]HTML5 离线存储 - 会话的替代方案? [关闭]
【发布时间】:2012-08-07 23:47:08
【问题描述】:

我正在开发一个大量使用 Session 的网站。我们计划将此网站从framework 2.0 迁移到framework 4.0。我们还计划使用 HTML5。由于我们正在重新设计应用程序,因此我们也在尽可能地减少 Session 的使用。

HTML5 的一个特点是离线存储。它可以用作保存 Session 数据的替代位置吗? HTML5 离线存储是否可以替代 Asp.Net 会话?

【问题讨论】:

    标签: asp.net html session offline-storage


    【解决方案1】:

    会话数据存储在服务器上,HTML5离线存储存储在浏览器中。如果您愿意在浏览器中存储会话数据,请确保这将起作用。但是,如果您有敏感信息应该保留在服务器上,请将其保存在会话中。

    【讨论】:

      【解决方案2】:

      它当然可以用作 一些 会话当前使用的事情的替代品。

      而且它不会像会话那样对可伸缩性产生可怕的影响,所以我肯定会说你应该尽可能使用它。

      也就是说,与使用或完全不使用会话相比,在使用会话后对它们进行更多操作的可扩展性影响很小,因此,如果您不能完全消除会话,您可能不会发现它让你受益匪浅。

      但是对于存储客户端状态,它是一个更明智的解决方案(客户端状态在客户端,这听起来几乎是多余的,这是一个非常明智的想法),因此仅此一点就值得在可以的情况下进行。

      【讨论】:

        【解决方案3】:

        您好,是的,您可以将值存储在 html5 存储对象中,例如 sessionStorage/localStorage,请访问 Html5 Storage Doc 以获取更多详细信息。使用它,您可以在本地临时/永久存储中间值,然后访问您的值 用于存储会话的值

        sessionStorage.getItem('label')
        sessionStorage.setItem('value', 'label')
        

        或使用永久存储值

        localStorage.getItem('label')
        localStorage.setItem('value', 'label')
        

        所以任何需要存储的session数据,都可以使用html5提供的sessionStorage。

        【讨论】:

          【解决方案4】:

          使用较新的 HTML5 api 时需要注意的一点是用户当前使用的浏览器是否支持它。您可以使用 Modernizer 之类的库来进行特征检测。

          Aspnet 会话和本地存储不是对等的。如果这是您的目标,您可以使用本地存储来维护状态。

          在过去,我采用了一种基于 cookie 的方式来保存数据,而不是本地存储(以安全地定位所有浏览器……无论如何都要使用 cookie)。也许它可以提供帮助。请注意下面的代码需要JSON2

          var Util = (function () {
              return {
                  // Wrapper module for getting and setting cookies
                  CookieManager: {
                      set: function (name, value, days) {
                          if (days) {
                              var date = new Date();
                              date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                              var expires = "; expires=" + date.toGMTString();
                          }
                          else var expires = "";
                          document.cookie = name + "=" + value + expires + "; path=/";
                      },
                      get: function (name) {
                          var nameEQ = name + "=";
                          var ca = document.cookie.split(';');
                          for (var i = 0; i < ca.length; i++) {
                              var c = ca[i];
                              while (c.charAt(0) == ' ') c = c.substring(1, c.length);
                              if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
                          }
                          return null;
                      },
                      erase: function (name) {
                          this.set(name, "", -1);
                      }
                  }
              }
          })();
          
          var UserPrefs = (function () {
              var cookieName = 'UsrPrf';
              var data = {};
              return {
                  set: function (propName, value) {
                      if (data == null) data = {};
                      data[propName] = value;
                  },
                  get: function (propName, defaultValue) {
                      if (data == null) {
                          data = {};
                          return defaultValue;
                      } else {
                          return data[propName] == undefined ? defaultValue : data[propName];
                      }
                  },
                  load: function () {
                      try {
                          data = JSON.parse(Util.CookieManager.get(cookieName));
                      } catch (e) {
                          data = {};
                      }
                      return data;
                  },
                  save: function (ttl) {
                      if (!ttl) ttl = 30;
                      Util.CookieManager.set(cookieName, JSON.stringify(data), ttl);
                  }
              };
          })();
          

          【讨论】:

          • 很棒的实用功能,但由于我的目标是 HTML5,所以我会坚持使用 localStorage。
          猜你喜欢
          • 2011-02-27
          • 1970-01-01
          • 2011-02-05
          • 1970-01-01
          • 2021-07-25
          • 2011-11-27
          • 1970-01-01
          • 2013-09-29
          • 2018-11-25
          相关资源
          最近更新 更多