HTML5离线存储 - 会话的替代方案?

时间:2012-08-07 15:33:25

标签: asp.net html5 session offline-storage

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

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

4 个答案:

答案 0 :(得分:3)

会话数据存储在服务器上,HTML5离线存储存储在浏览器中。如果您愿意在浏览器中存储会话数据,那么一定会有效。但是,如果您有敏感信息应保留在服务器上,请将其保留在会话中。

答案 1 :(得分:2)

它当然可以用作某些会话目前使用的内容的替代。

它对会话的可扩展性没有可怕的影响,所以我当然会说你应该尽可能使用它。

也就是说,一旦你使用会话,使用会话做多一点的可扩展性与使用或不使用它们之间的差异相比是微不足道的,所以如果你不能完全消除会话,你可能不会发现它让你获得了很多。

但是对于存储客户端状态,它是一个更明智的解决方案(客户端状态在客户端上,这听起来几乎是多余的,这是一个非常明智的想法),所以只有这样才值得做,当你可以时。

答案 2 :(得分:1)

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

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

或使用

永久存储值
localStorage.getItem('label')
localStorage.setItem('value', 'label')

所以你需要存储的会话数据,你可以使用html5提供的sessionStorage。

答案 3 :(得分:1)

使用较新的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);
        }
    };
})();