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>
要解決您的問題,您可以結合使用服務器端存儲和時間戳。這是一種可能的方法:
生成新代碼時,將其與時間戳一起存儲在數(shù)據(jù)庫或 Redis 等持久存儲解決方案中。
當用戶訪問網(wǎng)站時,從存儲中檢索最后生成的代碼及其時間戳。
將當前時間戳與存儲的時間戳進行比較,以確定自上次代碼生成以來是否已過去 24 小時。您可以使用 JavaScript 中的 Date 對象來處理時間戳。
如果超過 24 小時,則生成新代碼并更新數(shù)據(jù)庫中存儲的代碼和時間戳。
通過使用這種方法,您可以避免大量的 setTimeout 調用,并且還無需為每個用戶循環(huán)訪問整個數(shù)據(jù)庫。相反,您只需要對每次用戶訪問的時間戳進行簡單的比較。
關于用戶欺騙 IP 的問題,完全防止 IP 欺騙具有挑戰(zhàn)性,因為用戶可以使用各種技術來更改其 IP 地址。但是,您可以實施額外的安全措施來最大程度地減少 IP 欺騙的影響:
實施用戶身份驗證:要求用戶創(chuàng)建帳戶并登錄才能訪問網(wǎng)站。這樣,即使他們更改了 IP,他們仍然需要有效的憑據(jù)來生成新代碼。
實施速率限制:限制特定時間范圍內每個用戶的代碼生成請求數(shù)量。這有助于防止濫用并減少 IP 欺騙的影響。
監(jiān)控可疑活動:實施日志記錄和監(jiān)控機制來檢測可能表明 IP 欺騙嘗試的異常模式或行為。您可以設置警報或觸發(fā)器,以便在檢測到可疑活動時通知您。
雖然這些措施不能完全消除 IP 欺騙的可能性,但它們可以使用戶更難濫用系統(tǒng)并減少此類嘗試的影響。