我正在一个大量使用 Session 的网站上工作。我们计划将此网站从 迁移framework 2.0
到framework 4.0
. 我们还计划使用 HTML5。由于我们正在重新设计应用程序,因此我们也在尽可能地减少 Session 的使用。
HTML5 的特性之一是离线存储。它可以用作保存 Session 数据的替代位置吗?HTML5 离线存储是否可以替代 Asp.Net 会话?
我正在一个大量使用 Session 的网站上工作。我们计划将此网站从 迁移framework 2.0
到framework 4.0
. 我们还计划使用 HTML5。由于我们正在重新设计应用程序,因此我们也在尽可能地减少 Session 的使用。
HTML5 的特性之一是离线存储。它可以用作保存 Session 数据的替代位置吗?HTML5 离线存储是否可以替代 Asp.Net 会话?
会话数据存储在服务器上,HTML5 离线存储存储在浏览器中。如果您愿意在浏览器中存储会话数据,请确保它会起作用。但是,如果您有敏感信息应该保留在服务器上,请将其保存在会话中。
它当然可以用作会话当前使用的某些事物的替代品。
而且它对会话的可伸缩性没有可怕的影响,所以我肯定会说你应该尽可能使用它。
也就是说,与使用或不使用它们之间的差异相比,一旦你使用它们,对它们进行更多操作的可伸缩性影响很小,所以如果你不能完全消除会话,你可能不会发现它有所收获你们都这么多。
但是对于存储客户端状态,它是一个更明智的解决方案(客户端状态在客户端上,这听起来几乎是多余的,这是一个非常明智的想法),因此仅此一点就值得在可能的情况下进行。
嗨,是的,您可以将值存储在 html5 存储对象中,例如 sessionStorage/localStorage,请访问Html5 存储文档以获取更多详细信息。使用它,您可以在本地临时/永久存储中间值,然后访问您的值以存储会话的值
sessionStorage.getItem('label')
sessionStorage.setItem('value', 'label')
或使用永久存储值
localStorage.getItem('label')
localStorage.setItem('value', 'label')
所以任何需要存储的session数据,都可以使用html5提供的sessionStorage。
使用较新的 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);
}
};
})();