ThinkPHP5 ialah rangka kerja PHP yang dibangunkan berdasarkan model MVC Ia mudah digunakan dan berkuasa, serta digunakan secara meluas dalam pembangunan aplikasi web peringkat perusahaan.
Fungsi kod pengesahan ialah salah satu fungsi pengesahan keselamatan yang lebih biasa digunakan, tetapi dalam proses pembangunan sebenar, ramai orang akan menghadapi situasi di mana kod pengesahan tidak berkuat kuasa atau pengesahan gagal. Mari analisa kemungkinan punca dan penyelesaian kepada situasi ini.
Pertama sekali, anda harus menyemak sama ada pemalam kod pengesahan telah diperkenalkan dengan betul.
Dalam ThinkPHP5, pemalam kod pengesahan terletak dalam direktori thinkcaptcha dan boleh diperkenalkan melalui kod berikut:
use thinkcaptchaCaptcha; //显示验证码 public function verify(){ $captcha = new Captcha(); return $captcha->entry(); }
Tambahkan kod pengesahan pada kod HTML di bahagian hadapan:
<img src="{:captcha_src()}" alt="captcha" onclick="this.src='{:captcha_src()}?t='+Math.random();">
Jika Jika kod pengesahan masih tidak dapat dipaparkan seperti biasa, ini mungkin masalah cache Anda boleh mengosongkan cache penyemak imbas atau cuba menggunakan penyemak imbas lain untuk ujian.
Jika anda memastikan kod pengesahan dipaparkan dengan betul, tetapi kod ralat dipaparkan semasa pengesahan, anda perlu menyemak perkara berikut mata:
2.1 Adakah nama parameter borang yang diserahkan semasa pengesahan kod pengesahan betul
Secara lalai, pemalam kod pengesahan ThinkPHP5 akan menjana parameter POST bernama captcha untuk menyimpan nilai kod pengesahan? . Jika pengesahan gagal, maklumat ralat dalam format JSON perlu dikembalikan. Oleh itu, semasa mengesahkan, anda perlu memastikan bahawa nama parameter yang diserahkan dalam borang juga adalah captcha, contohnya:
//验证验证码 if (!captcha_check(input('post.captcha'))) { return json([ 'status' => '0', 'msg' => '验证码错误!' ]); }
2.2 Kod pengesahan tidak sensitif huruf besar dan kecil
Kod pengesahan adalah huruf besar/kecil -sensitif secara lalai Oleh itu, semasa menyemak kod pengesahan, anda perlu memastikan bahawa kod pengesahan yang dimasukkan adalah betul-betul sama dengan kod pengesahan yang dijana. Jika anda mahu kod pengesahan menjadi tidak peka huruf besar-besaran, anda boleh menambah parameter semasa memanggil kaedah captcha(), contohnya:
$captcha = new Captcha(['useZh' => false, 'useImgBg' => true, 'fontSize' => 20, 'useNoise' => true, 'length' => 4, 'useCurve' => false, 'fontttf' => '4.ttf', 'bg' => [151, 232, 66], 'reset' => true, 'codeSet' => '0123456789', 'expire' => 300, 'zhSet' => '']);
Dalam parameter di atas, parameter useZh digunakan untuk memaparkan kod pengesahan bahasa Cina , dan parameter useImgBg dan useNoise digunakan Untuk menjana imej latar belakang dan hingar, parameter panjang menunjukkan panjang kod pengesahan, parameter codeSet menetapkan set aksara kod pengesahan dan parameter tamat tempoh menetapkan masa tamat tempoh kod pengesahan. Ambil perhatian bahawa zhSet ditetapkan kepada rentetan kosong di sini, yang bermaksud bahawa kod pengesahan Cina tidak didayakan.
2.3 Kod pengesahan dan penyerahan borang berada pada halaman yang sama
Jika kod pengesahan dan penyerahan borang berada pada halaman yang sama, dan operasi pengesahan perlu diserahkan melalui Ajax, ia boleh menyebabkan masalah kerana domain silang, kegagalan sesi, dll. Sebabnya ialah kod pengesahan tidak dapat disahkan dengan jayanya. Pada masa ini, Access-Control-Allow-Origin perlu ditetapkan dalam persekitaran merentas domain, sebagai contoh:
header('Access-Control-Allow-Origin: *');
Anda juga perlu memastikan bahawa sesi itu diluluskan Anda boleh menambah:
header('P3P: CP=CAO PSA OUR'); session_start();
sebelum session_start() Anda boleh membaca dengan teliti bahagian tentang pemalam kod pengesahan dalam manual ThinkPHP5, atau cari soalan berkaitan dalam forum rasmi untuk mendapatkan lebih banyak penyelesaian dan petua untuk masalah ini.
Ringkasnya, apabila mereka bentuk dan melaksanakan kod pengesahan, adalah perlu untuk menimbang dan mengimbangi antara keselamatan dan pengalaman pengguna, mengikut prinsip reka bentuk biasa dan amalan terbaik serta menggunakan komponen dan perpustakaan pihak ketiga yang disemak untuk memastikan kebolehpercayaan dan kesahihan kod pengesahan.
Atas ialah kandungan terperinci kod pengesahan thinkphp5 gagal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!