【问题标题】:Generate random string every 24 hours then refresh JavaScript?每 24 小时生成随机字符串然后刷新 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 或其他方式从客户端查询...
  • 密码只有你一个吗?这段代码如何运行——它应该在特定时间自动运行吗?密码会存储在任何地方吗?如果是密码 - 身份验证方如何知道密码?

标签: javascript html jquery arrays json


【解决方案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
    • 那还是不行...我想用这个字符串作为当天的密码,所以它不能改变!
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多