从此幻灯片http://slides.html5rocks.com/#slide8 和Chrome:视图>开发人员>开发人员工具>存储选项卡,
我了解到至少有4种类型的浏览器存储:数据库,本地存储,会话存储,Cookie(还有更多吗?)
有什么区别?我什么时候应该使用另一个?
例如,如果某个站点想要存储用户首选项,那么该站点应该告诉浏览器使用哪种存储方法?
谢谢!
马特
我需要在每个打开的浏览器选项卡上(在javascript对象中)都有一些唯一的ID.必须通过请求保存Id,我决定使用sessionStorage.
当我在浏览器中打开新页面时效果很好.
但是,当我通过鼠标右键单击链接并在IE 11中选择"在新选项卡中打开链接"时 - sessionStorage不为空.所以我对新id的期望失败了.
Chrome以另一种方式工作,sessionStorage为空.
有谁知道如何解决IE的这个问题?
sessionStorage 非常适合在网页会话的生命周期内轻松快速地保存与会话相关的数据。但是,当浏览器选项卡关闭,但随后由有权访问浏览器“最近的选项卡”部分的任何人重新打开时,他们可以再次访问会话数据。
有什么方法可以将某些会话存储数据标记为“恢复选项卡时不保存”或者我应该尝试其他方法吗?例如,在这种情况下会话 cookie 的执行会更安全吗?
我有两个域domain1.site.com和domain2.site.com,我已在domain1.site.com中设置了会话存储,然后无法从同一选项卡获取其他域domain2.site.com上的会话存储。在子域之间导航时,是否还有其他方法可以用来识别标签?
是否无法检索我存储在sessionStorage(或localStorage)中的所有键/对象?
如果我完成了sessionStorage.name = 'John'和sessionStorage.city = 'New York',是否没有办法获取显示键name和的列表city?
所以基本上,当我登录时,我的后端会返回一个令牌,所以我将其存储为:
// var token is global
token = res.data.token;
sessionStorage.setItem("token", token);
Run Code Online (Sandbox Code Playgroud)
当我注销时,我只需从 sessionStorage 中删除项目并重置 var:
token = '';
sessionStorage.removeItem("token");
Run Code Online (Sandbox Code Playgroud)
然后在我的所有请求中我使用 var 创建标头
{ headers: { "Authorization": "Bearer " + token } }
Run Code Online (Sandbox Code Playgroud)
但我不知道我是否应该保留令牌变量或者只访问每个请求的存储,例如:
{ headers: { "Authorization": "Bearer " + sessionStorage.getItem("token"} }
Run Code Online (Sandbox Code Playgroud)
现在我只是使用存储以防用户刷新页面,这样他就不会丢失 javascript 上下文,因为我认为这比为每个请求访问存储更有效,但我不知道最好的安全方法是什么-明智的,或者开发人员通常做什么?
我知道在 window.localStorage 或 window.sessionStorage 中设置项目时,需要首先将其转换为字符串。我只是想知道……为什么要这样设计?我尝试用谷歌搜索,但找不到任何关于原因的文章;我发现的主要是关于如何设置 localStorage 的文章。
描述:
\n重现步骤:
\n预期结果:
\n实际结果:
\n注意:有趣的是,如果我在整个步骤中保持开发人员工具打开,一切都会正常工作
\n我目前正在开发一个将信息保存在会话存储中的应用程序。登录过程结束后,我看到会话存储被清除,并且 DOM 被刷新回登录屏幕。我想在每个规范的测试之间保留会话存储,这样我就不必不断注销并重新登录来检查同一容器中的多个内容。
我当前的设置如下所示:
describe('Quickpanel', () => {
before(() => {
cy.visit(base_url, {onBeforeLoad: (window) => {
window.sessionStorage.setItem('someInfo',
`{"SubsId":${info[0]},"RId":${nfo[1]}}`)
window.sessionStorage.setItem('loc', `${info[2]}`)
}})
LoginPage
.login(login_username, login_password)
Navbar
.clickOnBookingsSubLink('Beta Calendar')
.verifyCalendarLoads()
.clickBookReservationButton()
.verifyQuickPanelIsOpen()
})
Run Code Online (Sandbox Code Playgroud)
第一个测试运行良好,设置了正确的会话存储值,并使用提供的信息创建了其他值。当我移动到第二个“It()”时,会话存储就会消失。我还尝试在“beforeEach()”中设置会话存储项目,但出现了同样的问题。
如有任何帮助,我们将不胜感激,谢谢:)
我想在本地保存树状结构的值,然后根据用户交互检索它们.经过一些研究,我发现sessionStorage(或localStorage)可能是一个很好的方法来做这件事.但是我在保存嵌套数据方面遇到了麻烦.
通常你有:
sessionStorage['key'] = 'someString';
Run Code Online (Sandbox Code Playgroud)
我试图实现类似的东西:
sessionStorage['key1'] = [];
sessionStorage['key1']['key2'] = 'someString';
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个undefined错误.
我已经检查了一些其他存储库,但它们只提供了单个键值对选项.有什么我想念的吗?
session-storage ×10
javascript ×5
html ×2
html5 ×2
session ×2
access-token ×1
cookies ×1
cypress ×1
jwt ×1
safari ×1
security ×1