每 24 小时生成随机字符串然后刷新 JavaScript?
Posted
技术标签:
【中文标题】每 24 小时生成随机字符串然后刷新 JavaScript?【英文标题】:Generate random string every 24 hours then refresh JavaScript? 【发布时间】:2021-07-07 00:56:02 【问题描述】:我一直在尝试做的事情可能比我想象的要复杂一些。 所以我想要完成的是...... 通过javascript(我有代码)生成一个随机字符串,但只在凌晨12点或每24小时生成一个新字符串强>。
我拥有的代码应该可以工作(不能),这就是我需要帮助的地方。
<div id="password1">
</div>
<script>
var d = new Date();
var n = d.getDay();
var passwords = [makeid(10)[n]]; //want it to be 10... stay the same characters for 24hrs then change
document.getElementById("password1").innerhtml = passwords[n];
function makeid(length)
var result = [];
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++)
result.push(characters.charAt(Math.floor(Math.random() *
charactersLength)));
return result.join('');
</script>
是否可以使用 javascript,这是一个简单的解决方案还是语法错误?我不知道...
我查看了这个,找不到任何类似的帖子...
【问题讨论】:
请发送帮助!! 每 N 小时生成一个新代码应该很容易,但这意味着浏览器运行 24-7-365。您可能会发现更易于实施的服务器端解决方案 *不是新代码,只是新字符串... 在这种情况下,将code
和string
解释为相同。如果您愿意,可以使用随机字符串。如果您在后端有一个数据库,那么很容易安排它每 N 小时生成一个新的代码/字符串,可以使用 Ajax/Server Sent Events 或其他方式从客户端查询...
密码只有你一个吗?这段代码如何运行——它应该在特定时间自动运行吗?密码会存储在任何地方吗?如果是密码 - 身份验证方如何知道密码?
【参考方案1】:
由于您已经编写了自己的密码生成器,因此我使用您的代码制作了一个持续 24 小时的新密码字符串,除非 localStorage 被清除。
Cookie 也可以使用,但是 localStorage 和 Cookie 都不能在沙盒环境中正常运行,所以在你自己的开发环境中尝试一下。请注意,存储密码等私有值不利于安全性。
<div id="password1">
</div>
<script>
function makeid(length)
var result = [];
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++)
result.push(characters.charAt(Math.floor(Math.random() *
charactersLength)));
return result.join('');
const key = "keyForTheVulnurablePassword";
if(localStorage.getItem(key) == null)
let expireDate = new Date();
expireDate.setDate(expireDate.getDate() + 1);
localStorage.setItem(key, JSON.stringify(pw:makeid(10), expire:expireDate));
else
let currentDate = new Date();
let storedExpireDate = new Date(JSON.parse(localStorage.getItem(key)).expire);
if(storedExpireDate <= currentDate)
while(storedExpireDate <= currentDate)
storedExpireDate.setDate(storedExpireDate.getDate() + 1);
localStorage.setItem(key, JSON.stringify(pw:makeid(10), expire:storedExpireDate));
document.getElementById("password1").innerHTML = JSON.parse(localStorage.getItem(key)).pw;
</script>
【讨论】:
【参考方案2】:<div id="password1">
</div>
<script>
function execute()
var d = new Date();
var n = d.getDay();
var passwords = [makeid(10)[n]]; //want it to be 10... stay the same characters for 24hrs then change
document.getElementById("password1").innerHTML = passwords[n];
function makeid(length)
var result = [];
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++)
result.push(characters.charAt(Math.floor(Math.random() *
charactersLength)));
return result.join('');
const milisecondsUntil12Pm = 1000 // Write here the number of Miliseconds until 12 pm at the timeof run this script
setTimeout(()=>
execute()
setInterval(()=>
execute()
, 86400000) // 24 hours * 60 minutes * 60 seconds * 1000 miliseconds = 86400000 Miliseconds
, milisecondsUntil12Pm)
</script>
【讨论】:
记得将 milisecondsUntil12Pm 的值改为实时 @ManeulMB,当我刷新页面时,字符串应该在午夜之后才会改变! 所以你需要计算从那一刻到下午 12 点的毫秒数,并将其值保持在 const milisecondsUntil12Pm 那还是不行...我想用这个字符串作为当天的密码,所以它不能改变!以上是关于每 24 小时生成随机字符串然后刷新 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章