Dalam proses pembangunan menggunakan ThinkPHP3, kami biasanya menggunakan kod pengesahan untuk meningkatkan keselamatan sistem. Walau bagaimanapun, kadangkala kami menghadapi masalah yang tidak dipaparkan oleh kod pengesahan. Isu ini boleh berlaku atas sebab yang berbeza, beberapa kemungkinan punca dan penyelesaian diterangkan di bawah.
1. Laluan storan imej kod pengesahan tidak betul
Dalam ThinkPHP3, imej kod pengesahan disimpan dalam direktori sementara secara lalai Direktori ini boleh ditetapkan dalam config.php fail konfigurasi , contohnya:
return array( 'TEMP_PATH' => './Public/temp/', //其他配置 );
Jika direktori tidak wujud atau tidak mempunyai kebenaran menulis, kod pengesahan tidak akan dipaparkan seperti biasa. Oleh itu, kita perlu menyemak sama ada direktori itu wujud dan jika ia mempunyai kebenaran menulis.
2. Penjanaan imej kod pengesahan gagal
Apabila kita perlu memaparkan imej kod pengesahan dalam penyemak imbas, kita perlu menggunakan Tindakan untuk menjana imej kod pengesahan. Tindakan ini biasanya ditakrifkan dalam pengawal, contohnya:
class VerifyAction extends Action { public function index(){ import("ORG.Util.Verify"); Verify::buildImage(); } }
Jika penjanaan imej kod pengesahan gagal, ia juga akan menyebabkan kod pengesahan tidak dipaparkan seperti biasa. Kami boleh menyemak punca khusus masalah ini dengan menambah log atau maklumat penyahpepijatan, contohnya:
class VerifyAction extends Action { public function index(){ import("ORG.Util.Verify"); $res = Verify::buildImage(); if(!$res) Log::write('验证码图片生成失败'); } }
3 Kod pengesahan Masalah penjimatan sesi
Apabila kami memasukkan kod pengesahan dalam penyemak imbas. , anda perlu membandingkan nilai kod pengesahan dengan nilai yang disimpan dalam Sesi untuk menentukan sama ada input adalah betul. Jika nilai kod pengesahan tidak sepadan dengan nilai yang disimpan dalam Sesi, maka kami perlu menjana semula kod pengesahan. Oleh itu, kita perlu memastikan bahawa nilai kod pengesahan boleh disimpan dengan betul ke Sesi, contohnya:
class VerifyAction extends Action { public function index(){ import("ORG.Util.Verify"); Verify::buildImage(); $_SESSION['verify'] = md5(strtolower(trim(Verify::getCode()))); } }
Dalam kod di atas, nilai kod pengesahan diproses melalui trim( ) fungsi, yang boleh mengalih keluar Ruang hadapan dan mengekor serta pemulangan gerabak, dsb. Pada masa yang sama, penyulitan dilakukan melalui fungsi md5() untuk memastikan nilai kod pengesahan tidak dapat diteka dengan mudah.
4. Ralat URL imej kod pengesahan
Apabila kami menggunakan teg img dalam halaman untuk memaparkan imej kod pengesahan, kami perlu menetapkan pautan URL yang betul. Jika pautan ditetapkan dengan salah, kod pengesahan tidak akan dipaparkan dengan betul. Kami perlu memastikan bahawa parameter pautan ditetapkan dengan betul, contohnya:
<img src="__APP__/Verify/index" onclick="javascript:this.src='__APP__/Verify/index?'+Math.random();"/>
Dalam kod di atas, kami telah menggunakan JavaScript untuk mengelakkan isu caching penyemak imbas. Setiap kali anda mengklik pada imej kod pengesahan, imej kod pengesahan akan dimuat semula dengan nombor rawak.
Ringkasan
Di atas ialah beberapa sebab dan penyelesaian yang mungkin menyebabkan kod pengesahan ThinkPHP3 dipaparkan secara tidak normal. Apabila kita menghadapi masalah ini, kita boleh menyiasat dan mengendalikannya mengikut situasi tertentu. Dengan menyelesaikan masalah ini, kami dapat meningkatkan keselamatan sistem kami di samping mengukuhkan kemahiran pembangunan kami sendiri.
Atas ialah kandungan terperinci Mari kita bincangkan tentang penyiasatan dan penyelesaian kepada masalah kod pengesahan ThinkPHP3 tidak dipaparkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!