除了非持久性和仅限于当前窗口的范围之外,对本地存储的会话存储有任何好处(性能,数据访问等)吗?
localStorage,sessionStorage,session和cookies的技术优势和缺点是什么?我何时使用其中一个?
SessionStorage和LocalStorage允许在Web浏览器中保存键/值对.该值必须是一个字符串,并且保存js对象并不简单.
var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过将对象序列化为JSON,然后反序列化它们来恢复对象来避免此限制.但是Storage API总是通过setItem和getItem方法传递.
sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D
Run Code Online (Sandbox Code Playgroud)
我可以避免这种限制吗?
我只是想执行这样的事情:
sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'
Run Code Online (Sandbox Code Playgroud)
我曾尝试defineGetter和defineSetter方法拦截电话,但它是一个单调乏味的工作,因为我必须定义所有属性和我的目标是不知道未来的属性.
我在我的网站中有一些值,我希望在浏览器关闭时清除,我选择sessionStorage来存储该值,当选项卡关闭时清除它并在用户按f5时保持存储,但如果用户在不同的选项卡中打开一些链接这个值不可用.我如何在我的应用程序之间共享所有浏览器选项卡之间的sessionStorage值?
用例:将值放在某个存储中,在所有浏览器选项卡中保持该值可访问,如果所有选项卡都关闭则清除它.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
Run Code Online (Sandbox Code Playgroud) 虽然localStorage的大小已经详细解决并且有一个在线测试,但我想知道sessionStorage对于常见浏览器的最大大小是多少?
这些概念之间有什么区别,我应该何时特别使用?此列表是否也包含相同一般概念的不同名称?
看来,对于sessionStorageChrome的隐身模式与Safari的私人浏览和Firefox的私人窗口,它的工作方式不同?我可以在http://www.webdirections.org/blog/webstorage-persistent-client-side-data-storage/上找到一些内容,但它没有说Safari的私人浏览会抛出异常.
以下是我打开"私人浏览"的方式:
并在Safari上,sessionStorage不起作用,如果我在控制台中执行以下操作:
> sessionStorage["foo"] = 123.4
Error: QUOTA_EXCEEDED_ERR: DOM Exception 22
> sessionStorage["foo"]
undefined
Run Code Online (Sandbox Code Playgroud)
但在Chrome或Firefox上,sessionStorage照常工作(非私人浏览).就上述sessionStorage问题而言是否准确?
我想在我的固定布局epub3电子书的一章末尾进行测验.这个测验将跨越多个页面,并且本质上是多项选择.每个问题都包含问题本身和四个选项,每个选项都有一个单选按钮.在测验结束时,用户将单击按钮以显示其整体结果.为此,我需要在页面之间共享信息.这样做的一种方法是将所有页面放在一个XHTML文档中,然后我可以存储学生为javascript变量中的每个问题提供的答案.但是,在同一个XHTML文件中有多个固定布局epub3书的页面是否有效?正如我在这里所做的那样:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
<title>My Book</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<style>
p.pagebreak {
page-break-after:always;
}
</style>
</head>
<body>
<p>
Text on Page 1
</p>
<p class="pagebreak"></p>
<p>
Text on Page 2
</p>
<p class="pagebreak"></p>
<p>
Text on Page 3
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它在iBooks中显得很好.
或者,如果使用多个页面,我可以使用存储学生的答案window.sessionStorage.但是,我不知道有多少读者支持存储.我希望测验适用于iBooks以及Android和Windows平板电脑和台式机.
您如何建议我实施我的测验?
我有一些javascript来检查sessionStorage中的对象,并使用它来重新填充输入字段.我使用它来帮助我的网站上的用户,如果他们离开表单未完成,并导航或尝试在他们的会话过期后提交表单.
我的理解是sessionStorage没有链接到服务器会话,它链接到浏览器,所以我是否在服务器上有新的会话是无关紧要的.
几个月前我最初测试时支持了这一点.但是,似乎不再是这种情况,当我清除会话cookie并重新加载我的页面时,我的sessionStorage也被清除了.这是使用Chrome和Firefox.
我不想使用localStorage,因为这可能会导致共享计算机出现问题,而当浏览器窗口关闭时,sessionStorage将被清除.
JS获取我存储对象的值
JSON.parse(sessionStorage.getItem("draftPost") || null);
Run Code Online (Sandbox Code Playgroud)
JS保存价值
$("#wallText").on("change",function(){
sessionStorage.setItem("draftPost",JSON.stringify(draftPost));
});
Run Code Online (Sandbox Code Playgroud) 我有一个与REST API服务器通信的Angular应用程序(SPA),我有兴趣找到存储从API服务器返回的访问令牌的最佳方法,以便Angular客户端可以使用它来验证未来的请求到API.出于安全原因,我想将其存储为浏览器会话变量,以便在关闭浏览器后不会保留令牌.
我正在使用资源所有者密码授权实现一个稍微定制的OAuth 2.0版本.Angular应用程序提供了一个表单,供用户输入其用户名和密码.然后将这些凭证发送到API以换取访问令牌,然后必须将其作为标头(授权:承载%令牌%)发送给API的所有出站请求,以便它可以授权对其他路由的请求.
我对Angular的领域还很陌生,但是我想在处理这些令牌时实现的工作流程总结如下.
1)客户端向API发出请求,为其提供用户凭据.
2)如果此请求成功,则令牌存储在某处(问题在哪里)
3)拦截HTTP请求.如果设置了token,则将其作为标头传递给API
4)浏览器/选项卡关闭时,令牌被销毁.
我知道Angular提供$ window.sessionStorage,这似乎是我正在寻找的,但我担心它根据我读过的各种资源不能在所有浏览器上工作.这是一个企业级应用程序,必须兼容各种浏览器(IE,Chrome,Firefox).我能安全地使用它,并确信它会稳定吗?
根据我的理解,替代方案是$ window.localStorage或cookies($ cookies,$ cookieStore).这对我来说不是一个理想的解决方案,因为我不希望这些数据持续存在,但如果这更可靠,我将不得不牺牲兼容性的效率.我也认为可以简单地将它设置为$ rootScope上的值并以这种方式引用它,但我不确定这是否可行.
我希望一切都有道理.任何帮助/建议将不胜感激.谢谢!
cookies session-storage local-storage access-token angularjs
session-storage ×10
html5 ×6
javascript ×6
cookies ×3
access-token ×1
angularjs ×1
epub ×1
epub3 ×1
firefox ×1
jquery ×1
safari ×1
web-sql ×1