我有一个对象,其中包含与用户UI相关的数据.目前,数据以json的形式出现,我运行JSON.parse来评估对象并相应地生成一些HTML.
我正在考虑将json字符串存储在本地会话存储(而不是本地存储)中,并在每次需要使用新HTML更新UI时调用它.这样,如果用户在同一浏览器中打开另一个页面,则所有页面的所有HTML都是相同的.
目前,该对象存储在内存中,用户在UI上的操作与对象修改之间的交互运行得很快.如果我将其序列化并存储在会话存储中,浏览器是否会将数据存储在RAM或硬盘驱动器上并使页面变慢?
我知道可以通过覆盖Storage.prototype.getItem,setItem,removeItem和clear来覆盖HTML5存储API.但是,这将覆盖本地存储和会话存储的.
是否可以覆盖一个而不是另一个?或者单独覆盖两个?
一点上下文:我有一个现有的应用程序,它大量使用本地存储和会话存储.我想添加一些临时代码来镜像另一个存储机制中的本地存储中的东西,但我不想随之拖动会话存储内容.
我可以更新对localStorage的每个引用来调用一些可以执行镜像的包装器函数,但我真的不想更新所有这些调用.如果我可以通过覆盖一组存储方法来本地化这些代码,那将更加清晰.
我正在使用客户端JavaScript来使用Web Storage存储一些变量,更具体地说,是sessionStorage.
但是我不确定用户是否可以以任何方式简单地修改这些变量的值?如果是这样,请提供一个如何发生这种情况的例子.
我试图在sessionStorage中保留一些数据,但如果我刷新页面或从链接离开然后返回,则sessionStorage不再存在.
我是sessionStorage的新手,很抱歉,如果这是一个明显的修复.
基本上我将数组存储到sessionStorage中.
$scope.addPlant = function(plant) {
for (i = 0; i < $scope.userPlantList.length; i++) {
if ($scope.userPlantList[i] === plant) {
alert("You have already added this plant");
return;
}
}
$scope.userPlantList.push($scope.currentPlant);
sessionStorage.setItem("Plants",JSON.stringify($scope.userPlantList));
};
Run Code Online (Sandbox Code Playgroud)
然后,当我想看到所有存储的内容时
$scope.retreiveList = function() {
var retrieved = sessionStorage.getItem("Plants");
$scope.userPlantList = JSON.parse(retrieved);
}
Run Code Online (Sandbox Code Playgroud)
当我不刷新页面/应用程序时,这很好用.
问题:如何在刷新/立即重新访问期间让我的sessionStorage持续?
这是我的HTML代码,这里我将json数组存储在localstorage中.我希望以后随时迭代json,但它显示未定义.如何使用js迭代存储的json数组?
<!DOCTYPE html>
<html>
<head>
<script>
var ob=[
{
"id":1,
"name":"one"
},
{
"id":2,
"name":"two"
}
];
function clickCounter() {alert("dsdsd");
if(typeof(Storage) !== "undefined") {
if (sessionStorage.ob) {
sessionStorage.ob = ob;
} else {
sessionStorage.ob = undefined;
}
alert(sessionStorage.ob[0].id);
for (var i in sessionStorage.ob)
{
alert(sessionStorage.ob[i].id);
}
} else {
}
}
</script>
</head>
<body>
<button onclick="clickCounter()" type="button">Click me!</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我使用以下方法开发了一个javascript聊天(后端的php):
1) long-polling to get new messages for the receiver
2) sessionStorage to store the counter of messages
3) setInterval to read new messages and if sessionStorageCounter < setIntervalCounter then the last message is shown to receiver.
4) javascript to create,update and write the chat dialogues
Run Code Online (Sandbox Code Playgroud)
该模块工作正常,但当用户快速聊天时,接收者的前端会收到两到三条相同的消息,(计数器都不会失败,查询也不会提供双重插入).
代码似乎是正确的(这就是我不提供代码的原因),因此间隔延迟可能是原因(在减少间隔延迟时,没有任何变化).
您是否认为上述架构是一种不好的做法,您认为哪种架构可以消除错误?
user: {firstName: "loki", lastName: "ch"}
Run Code Online (Sandbox Code Playgroud)
我将此用户存储在会话存储中.
$window.sessionStorage.user = user;
Run Code Online (Sandbox Code Playgroud)
当我用它取回它时
$window.sessionStorage.user,我得到了:
[object Object]
Run Code Online (Sandbox Code Playgroud)
我想要JSON.有什么建议?
我正在尝试使用sessionstorage存储js数字变量,但是当我从存储中检索变量时,当我将它们添加在一起时,它们的行为就像字符串变量。我认为这可能与我使用 sessionStorage.setItem 存储变量的方式有关,但不确定
我已将代码保存在http://codepen.io/MHUMPHRI/pen/bpXpPm
非常感谢任何帮助。干杯。麦克风
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
OUTPUT TOTAL IS:
<div id="TotalOutput"></div>
<br>
<script>
$(document).ready(function () {
InputTotals()
OutputTotals()
});
</script>
</html>
<script>
var input1 = 222
var input2 = 111
var input3 = 777
var input4 = 777
function InputTotals() {
var totalA = input1 + input2;
var totalB = input3 + input4;
sessionStorage.setItem("TotalA", totalA);
sessionStorage.setItem("TotalB", totalB);
}
function OutputTotals() {
var output1 = sessionStorage.getItem("TotalA");
var output2 = sessionStorage.getItem("TotalB");
var totaloutput = output1 + output2;
$("#TotalOutput").html(totaloutput);
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 Vue.js/Vuex 开发一个 web 应用程序,当用户刷新页面时,状态丢失。
我试图坚持在一些州sessionStorage,但我意识到,用户可以对其进行编辑和例如让一个状态true,把它变成false。
我的问题是:
用户可以编辑sessionStorage吗?
将状态存储在 a 中是否安全sessionStorage?
我可以在不添加对项目的其他依赖的情况下以另一种方式保持状态吗?
- - - - - - - 更新 - - - - - - - - -
对于有类似问题的人,我使用beforeEnter 和 beforeEach解决了问题,因此每次路由更改(使用 beforeEach)和每次页面刷新(使用 beforeEnter)时,我都会转到后端端点,而不是尝试保持状态。
感谢大家的有用回复!
我正在使用 sessionStorage 来保存 accessToken。我的步骤如下:-
实际上,它并没有将我从另一个选项卡中注销。
我添加了下面的代码,但它没有按预期工作。
@HostListener('window:storage', ['$event'])
onStorageChange(sv:StorageEvent) {
if(sv.storageArea == sessionStorage)
{
let token = sessionStorage.getItem('accessToken');
if(token == null || token == undefined)
this.router.navigate(['/login']);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我做错了什么,请告诉我。我目前在主页中使用此代码。它是正确的位置吗?
session-storage ×10
javascript ×8
html5 ×3
json ×2
access-token ×1
ajax ×1
angular ×1
angularjs ×1
jquery ×1
long-polling ×1
setinterval ×1
vue.js ×1
vuex ×1
web-storage ×1