2012-08-07 66 views
1

我正在使用Session的网站上工作。我们计划将此网站从framework 2.0迁移到framework 4.0。我们也计划使用HTML5。由于我们正在重新设计应用程序,因此我们也尽可能地减少Session的使用。HTML5离线存储 - 会话的替代?

HTML5的功能之一是离线存储。它可以作为另一个地方来保存会话数据吗? HTML5离线存储是否替代Asp.Net会话?

回答

3

会话数据存储在服务器上,HTML5离线存储存储在浏览器中。如果你很喜欢在浏览器中存储会话数据,那么肯定会有效。如果您的敏感信息应保留在服务器上,请将其保留在会话中。

1

嗨,是的,你可以存储你的值在HTML5存储对象,如sessionStorage/localStorage,请访问 Html5 Storage Doc以获得更多详细信息。使用这个你可以temporaryly /永久存储在本地的中间值,然后永久使用

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

访问你的价值观 用于存储会话

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

或存储值的值,这样,你需要的任何会话数据存储,你可以使用html5提供的sessionStorage。

2

它当然可以用作的一些替代东西会话当前用于。

而且它对会话的可伸缩性没有可怕的影响,所以我肯定会说你应该在可用时使用它。也就是说,一旦你使用它们,会话的可扩展性就会比使用或不使用它们的区别要小,因此如果你不能完全消除会话,你可能会没有发现它让你获得了很多。

但是,对于存储客户端状态,这是一个更合理的解决方案(客户端状态在客户端上,这听起来几乎是多余的,这是一个非常明智的想法),所以对于这一点,只要有可能,就值得做。

1

使用较新的HTML5 api的时候需要注意的一件事是,它是否支持用户当前使用的浏览器。您可以使用像Modernizer这样的库来执行功能检测。

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

在过去,我采用了基于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); 
     } 
    }; 
})(); 
+0

伟大的实用功能,但由于我的目标是HTML5,我会坚持localStorage。 – Asdfg 2012-08-07 16:03:27