我正在一个大量使用 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);
}
};
})();