存储具有到期日期的会话数据
Store data for session with an expiration date
我正在 Angular(准确地说是 Ionic 5)中构建一个移动应用程序,我需要一种方法来在我的用户工作流程中保留会话数据。
我考虑过为此使用 sessionStorage,但重要的是我的用户会话应在 5 分钟后自动过期。所以我想存储数据并在用户完成工作流时重置这些数据,或者如果用户未在 5 分钟内完成工作流则重置它们。
最好的方法是什么?
将过期时间与数据一起存储在 sessionStorage
中,读取密钥时,检查时间以确保它仍然有效。
参考this article。
这是一个例子:
setExpiryItem=function(n,v,e){
sessionStorage.setItem(n,JSON.stringify({expiryDate:Date.now()+parseInt(e),value:v}));
}
getExpiryItem=function(n){
var k=JSON.parse(sessionStorage.getItem(n));
if(!k)return {msg:"Not set",expiryDate:undefined,val:undefined};
if(Date.now()>k.expiryDate){/* sessionStorage.removeItem(n); You can remove it if you want */return {msg:"Expired",expiryDate:k.expiryDate,val:null};}
return {msg:"Success",expiryDate:k.expiryDate,val:k.value};
}
document.getElementById("time").onkeydown=function(e){
if(e.key=="Enter")document.getElementById("submit").click();
}
document.getElementById("submit").onclick=function(){
setExpiryItem("key","This is 'key'!",document.getElementById("time").value);
}
document.getElementById("retrieve").onclick=function(){
var r=getExpiryItem("key");
if(r.msg=="Success")
document.getElementById("value").textContent=r.val;
else if(r.msg=="Not set")
document.getElementById("value").innerHTML="<span style='color:red'>Please set key before retrieving it!</span>";
else if(r.msg=="Expired")
document.getElementById("value").innerHTML="<span style='color:red'>'key' has expired</span>";
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Storage Timeout</title>
</head>
<body>
<h3>This will not work on SO because it causes SecurityError</h3>
<p>Enter the expire time for key in sessionStorage</p>
<input type="number" id="time"/><button id="submit">Submit</button>
<hr/>
<button id="retrieve">Retrieve key</button>
<p id="value"></p>
</body>
</html>
您可以使用用户反应事件(点击、按键等)来刷新您的会话并进行任何您想要的控制!类似于 (click)="refreshSession()"
。您的所有控件都将在 refreshSession()
内进行
我正在 Angular(准确地说是 Ionic 5)中构建一个移动应用程序,我需要一种方法来在我的用户工作流程中保留会话数据。
我考虑过为此使用 sessionStorage,但重要的是我的用户会话应在 5 分钟后自动过期。所以我想存储数据并在用户完成工作流时重置这些数据,或者如果用户未在 5 分钟内完成工作流则重置它们。
最好的方法是什么?
将过期时间与数据一起存储在 sessionStorage
中,读取密钥时,检查时间以确保它仍然有效。
参考this article。
这是一个例子:
setExpiryItem=function(n,v,e){
sessionStorage.setItem(n,JSON.stringify({expiryDate:Date.now()+parseInt(e),value:v}));
}
getExpiryItem=function(n){
var k=JSON.parse(sessionStorage.getItem(n));
if(!k)return {msg:"Not set",expiryDate:undefined,val:undefined};
if(Date.now()>k.expiryDate){/* sessionStorage.removeItem(n); You can remove it if you want */return {msg:"Expired",expiryDate:k.expiryDate,val:null};}
return {msg:"Success",expiryDate:k.expiryDate,val:k.value};
}
document.getElementById("time").onkeydown=function(e){
if(e.key=="Enter")document.getElementById("submit").click();
}
document.getElementById("submit").onclick=function(){
setExpiryItem("key","This is 'key'!",document.getElementById("time").value);
}
document.getElementById("retrieve").onclick=function(){
var r=getExpiryItem("key");
if(r.msg=="Success")
document.getElementById("value").textContent=r.val;
else if(r.msg=="Not set")
document.getElementById("value").innerHTML="<span style='color:red'>Please set key before retrieving it!</span>";
else if(r.msg=="Expired")
document.getElementById("value").innerHTML="<span style='color:red'>'key' has expired</span>";
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Storage Timeout</title>
</head>
<body>
<h3>This will not work on SO because it causes SecurityError</h3>
<p>Enter the expire time for key in sessionStorage</p>
<input type="number" id="time"/><button id="submit">Submit</button>
<hr/>
<button id="retrieve">Retrieve key</button>
<p id="value"></p>
</body>
</html>
您可以使用用户反应事件(点击、按键等)来刷新您的会话并进行任何您想要的控制!类似于 (click)="refreshSession()"
。您的所有控件都将在 refreshSession()