每 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。您可能会发现更易于实施的服务器端解决方案 *不是新代码,只是新字符串... 在这种情况下,将codestring 解释为相同。如果您愿意,可以使用随机字符串。如果您在后端有一个数据库,那么很容易安排它每 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?的主要内容,如果未能解决你的问题,请参考以下文章

每小时以 hh24:mi:ss 格式生成系列

MYSQL创建一个触发器,用于24小时刷新一下数据库的表.

创建一个每 24 小时运行一次的活动?

Heroku 每 24 小时更新一次其中的文件

SQL 语句 生成当前时间 年月日小时分钟 再加4个随机数的字符串。

随机数组生成器 Java