Mempunyai tapak web di bahagian pelayan melalui node.js, setiap kali saya memuat semula halaman ia menjana kod baharu, saya ingin mengesan jika 24 jam telah berlalu sejak penjanaan kod terakhir, masalahnya ialah untuk saya melakukannya. perlu memikirkan 24 Adakah masa berlalu, jika saya menggunakan setTimeout() pada IP pengguna, dua masalah timbul, yang pertama ialah mereka boleh menukar ip mereka dengan mudah dan mendapatkan kod baharu, atau pun memulakan semula penghala dan menetapkan yang baru code ip , memandangkan sesetengah penghala datang dengan IP dinamik, masalah kedua ialah memandangkan beribu-ribu pengguna akan mengakses tapak web setiap hari atau bahkan setiap jam dengan bilangan setTimeouts sedemikian, pelayan akan dibebankan dengan jumlah memori yang diperuntukkan untuk setTimeouts sahaja. Saya telah membaca cara setTimeouts berfungsi, mereka memperuntukkan sedikit ruang dalam pengkompil JavaScript untuk dijalankan pada masa yang ditentukan, jadi timbunan atau ingatan saya pasti akan terbeban dengan ini, adakah terdapat cara yang lebih baik untuk menentukan sama ada 24 jam telah berlalu atau Don' t gunakan setTimeout()?
Saya cuba mencari masalah yang sama tetapi tidak dapat mencari penyelesaian untuk masalah ini, saya terfikir untuk menggunakan pangkalan data untuk menyelesaikan masalah ini tetapi masalah lain timbul kerana saya perlu mengulangi keseluruhan pangkalan data untuk menyemak sama ada masa semasa adalah 24 daripada semasa dokumen dibuat Beberapa jam lebih tinggi dan gelung sedemikian akan mengambil masa beberapa hari untuk disiapkan dan gagal jika API turun (saya mulakan semula dengan kerap untuk mengemas kini perkara)
Saya cuba mencari penyelesaian yang tidak memecahkan pelayan saya menggunakan setTimeouts dan tidak gagal jika API turun atas sebarang sebab dan mempunyai pilihan untuk dapat menentukan sama ada pengguna menipu ips p>
Untuk menyelesaikan masalah anda, anda boleh menggunakan gabungan storan sisi pelayan dan cap masa. Berikut adalah satu pendekatan yang mungkin:
Apabila anda menjana kod baharu, simpannya dengan cap masa dalam pangkalan data atau penyelesaian storan berterusan seperti Redis.
Apabila pengguna melawati tapak web, dapatkan semula kod yang dijana terakhir dan cap masanya daripada storan.
Membandingkan cap masa semasa dengan cap masa yang disimpan untuk menentukan sama ada 24 jam telah berlalu sejak penjanaan kod terakhir. Anda boleh menggunakan objek Tarikh dalam JavaScript untuk mengendalikan cap masa.
Jika lebih daripada 24 jam telah berlalu, jana kod baharu dan kemas kini kod serta cap masa yang disimpan dalam pangkalan data.
Dengan menggunakan pendekatan ini, anda mengelakkan banyak panggilan setTimeout dan juga tidak perlu mengulangi keseluruhan pangkalan data untuk setiap pengguna. Sebaliknya, anda hanya melakukan perbandingan ringkas cap masa setiap lawatan pengguna.
Berkenaan isu pengguna memalsukan IP, menghalang sepenuhnya penipuan IP adalah mencabar kerana pengguna boleh menggunakan pelbagai teknik untuk menukar alamat IP mereka. Walau bagaimanapun, anda boleh melaksanakan langkah keselamatan tambahan untuk meminimumkan kesan penipuan IP:
Laksanakan pengesahan pengguna: memerlukan pengguna membuat akaun dan log masuk untuk mengakses tapak web. Dengan cara ini, walaupun mereka menukar IP mereka, mereka masih memerlukan kelayakan yang sah untuk menjana kod baharu.
Laksanakan pengehadan kadar: Hadkan bilangan permintaan penjanaan kod bagi setiap pengguna dalam tempoh masa tertentu. Ini membantu mencegah penyalahgunaan dan mengurangkan kesan penipuan IP.
Pantau aktiviti yang mencurigakan: Laksanakan mekanisme pengelogan dan pemantauan untuk mengesan corak atau tingkah laku luar biasa yang mungkin menunjukkan percubaan penipuan IP. Anda boleh menyediakan makluman atau pencetus untuk memberitahu anda apabila aktiviti yang mencurigakan dikesan.
Walaupun langkah ini tidak dapat menghapuskan sepenuhnya kemungkinan penipuan IP, ia boleh menyukarkan pengguna untuk menyalahgunakan sistem dan mengurangkan kesan percubaan sedemikian.