Heim > Fragen und Antworten > Hauptteil
Habe eine Website auf der Serverseite über node.js. Jedes Mal, wenn ich die Seite aktualisiere, wird ein neuer Code generiert. Ich möchte feststellen, ob seit der letzten Codegenerierung 24 Stunden vergangen sind. Das Problem besteht darin, dass ich das tun muss Ich muss herausfinden, ob 24 Stunden vergangen sind und ich setTimeout() für die IP des Benutzers verwende. Es treten zwei Probleme auf: Das erste besteht darin, dass sie ihre IP problemlos ändern und einen neuen Code erhalten oder sogar den Router neu starten und einen neuen zuweisen können Code ip Da einige Router über dynamische IPs verfügen, besteht das zweite Problem darin, dass der Server mit der zugewiesenen Speichermenge überlastet wird, wenn man bedenkt, dass Tausende von Benutzern jeden Tag oder sogar jede Stunde mit einer solchen Anzahl von setTimeouts auf die Website zugreifen setTimeouts allein. Ich habe gelesen, wie setTimeouts funktionieren. Sie weisen etwas Platz im JavaScript-Compiler zu, um zu einem bestimmten Zeitpunkt ausgeführt zu werden, sodass mein Heap oder Speicher dadurch definitiv überlastet wird. Gibt es eine bessere Möglichkeit, festzustellen, ob 24 Stunden vergangen sind oder nicht? Kann ich setTimeout() nicht verwenden?
Ich habe versucht, das gleiche Problem nachzuschlagen, konnte aber keine Lösung für dieses Problem finden. Ich dachte darüber nach, eine Datenbank zu verwenden, um dieses Problem zu lösen, aber es tritt ein anderes Problem auf, weil ich die gesamte Datenbank durchlaufen muss, um zu überprüfen, ob die aktuelle Zeit ist 24 als bei der Erstellung des Dokuments. Ein paar Stunden höher und eine solche Schleife würde entweder Tage dauern, bis sie abgeschlossen ist, und fehlschlagen, wenn die API ausfällt (ich starte sie regelmäßig neu, um Dinge zu aktualisieren)
Ich versuche eine Lösung zu finden, die meinen Server nicht mit setTimeouts kaputt macht und nicht fehlschlägt, wenn die API aus irgendeinem Grund ausfällt, und die Möglichkeit bietet, festzustellen, ob der Benutzer IPs fälscht p>
P粉3563617222023-09-11 10:24:42
要解决您的问题,您可以结合使用服务器端存储和时间戳。这是一种可能的方法:
生成新代码时,将其与时间戳一起存储在数据库或 Redis 等持久存储解决方案中。
当用户访问网站时,从存储中检索最后生成的代码及其时间戳。
将当前时间戳与存储的时间戳进行比较,以确定自上次代码生成以来是否已过去 24 小时。您可以使用 JavaScript 中的 Date 对象来处理时间戳。
如果超过 24 小时,则生成新代码并更新数据库中存储的代码和时间戳。
通过使用这种方法,您可以避免大量的 setTimeout 调用,并且还无需为每个用户循环访问整个数据库。相反,您只需要对每次用户访问的时间戳进行简单的比较。
关于用户欺骗 IP 的问题,完全防止 IP 欺骗具有挑战性,因为用户可以使用各种技术来更改其 IP 地址。但是,您可以实施额外的安全措施来最大程度地减少 IP 欺骗的影响:
实施用户身份验证:要求用户创建帐户并登录才能访问网站。这样,即使他们更改了 IP,他们仍然需要有效的凭据来生成新代码。
实施速率限制:限制特定时间范围内每个用户的代码生成请求数量。这有助于防止滥用并减少 IP 欺骗的影响。
监控可疑活动:实施日志记录和监控机制来检测可能表明 IP 欺骗尝试的异常模式或行为。您可以设置警报或触发器,以便在检测到可疑活动时通知您。
虽然这些措施不能完全消除 IP 欺骗的可能性,但它们可以使用户更难滥用系统并减少此类尝试的影响。