Rumah  >  Artikel  >  rangka kerja php  >  Apakah yang perlu saya lakukan jika kod pengesahan thinkphp3.2.3 tidak dipaparkan?

Apakah yang perlu saya lakukan jika kod pengesahan thinkphp3.2.3 tidak dipaparkan?

PHPz
PHPzasal
2023-04-21 10:06:55843semak imbas

Sebagai pembangun PHP, saya sering menggunakan rangka kerja ThinkPHP, dan kod pengesahan merupakan tahap penting untuk perlindungan keselamatan tapak web Walau bagaimanapun, kadangkala apabila menggunakan rangka kerja ThinkPHP3.2.3, kami menghadapi masalah yang tidak dipaparkan oleh kod pengesahan. Ini membuatkan kami sangat keliru. Jadi, bagaimana untuk menyelesaikannya?

Pertama, mari kita memahami proses penjanaan kod pengesahan. Dalam ThinkPHP, kod pengesahan dilaksanakan dengan mencipta imej dan ThinkPHP menggunakan perpustakaan GD untuk menjana imej secara lalai. Ringkasnya, kod pengesahan dijana dengan menghasilkan gambar dengan garis gangguan, titik gangguan dan aksara rawak. Kemudian, jika kod pengesahan tidak dipaparkan, ia selalunya kerana penjanaan imej gagal.

Untuk menangani masalah ini, kami boleh mencuba langkah berikut untuk menyelesaikan masalah kod pengesahan tidak dipaparkan.

Langkah 1: Semak sama ada sesi dibuka

Mula-mula, kita perlu menyemak sama ada sesi telah dibuka. Oleh kerana penjanaan kod pengesahan memerlukan penggunaan sesi untuk menyimpan nilai kod pengesahan, jika sesi tidak dihidupkan, kod pengesahan tidak boleh dijana seperti biasa.

Semak status terbuka sesi dalam config.php Buka fail config.php dan tambahkan kod berikut dalam tatasusunan kembali:

'session_auto_start' => true,

Kod ini membolehkan program bermula. apabila ia bermula. Buka sesi secara automatik Jika ia sudah terbuka, ia tidak akan menjejaskan penggunaan biasa.

Langkah 2: Semak sama ada pustaka GD tersedia

Kedua, kita perlu menyemak sama ada pustaka GD telah dipasang, kerana ThinkPHP menggunakan perpustakaan GD secara lalai untuk menjana kod pengesahan. Jika pustaka GD tidak dipasang atau tidak boleh digunakan, kod pengesahan tidak boleh dijana seperti biasa.

Untuk menyemak sama ada pustaka GD telah dipasang, anda boleh menyemak sama ada modul gd2 telah dinyahmampat dalam fail php.ini dan ketiga-tiga modul extension=php_gd2.dll; .dll telah dinyahmampat Nota.

Cari dua baris konfigurasi berikut dalam fail php.ini:

extension=php_gd2.dll;
extension=php_mbstring.dll;

Jika tiada koma bertitik di hadapannya, ini bermakna pustaka GD mempunyai; telah dipasang dengan betul.

Langkah 3: Semak sama ada direktori penjanaan kod pengesahan boleh ditulis

Apabila kod pengesahan dijana, imej yang dijana perlu disimpan pada pelayan, jadi kami juga perlu menyemak sama ada Direktori penjanaan kod pengesahan boleh ditulis. Jika direktori penjanaan tidak mempunyai kebenaran atau tidak wujud, kod pengesahan tidak akan dijana seperti biasa.

Kami boleh menambah kod berikut dalam fail config.php untuk mengkonfigurasi direktori penjanaan kod pengesahan:

'captcha'  =>array(
        'fontSize' => 30,         //验证码字体大小
        'length'   => 4,          //验证码位数
        'useCurve' => false,      //是否画混淆曲线
        'useNoise' => false,      //是否添加杂点
        'fontttf'  => '5.ttf',    //验证码字体,不设置随机获取
        'bg'       => array(243, 251, 254), //背景颜色
        'reset'    => true        //验证成功后是否重置
    ),

Dalam tatasusunan ini, kami boleh menyesuaikan panjang kod pengesahan dan sama ada untuk melukis Lengkung kebingungan, sama ada menambah titik hingar, laluan fail fon, dsb. Ia juga membolehkan kami menyesuaikan nama untuk direktori penjanaan kod pengesahan, dan direktori ini mesti boleh ditulis.

Sebagai contoh, jika direktori penjanaan kod pengesahan ditetapkan kepada direktori Application/Rtime/Cache/, maka kita perlu memastikan bahawa direktori itu boleh ditulis, jika tidak, kod pengesahan tidak akan dipaparkan.

Langkah 4: Cuba tukar kod pengesahan kepada mod url

Jika tiada masalah ditemui dalam langkah di atas, maka kita boleh cuba menggunakan mod Url yang disediakan oleh ThinkPHP untuk menjana pengesahan kod. Mod ini menggunakan teg kanvas HTML5, yang boleh menjana kod pengesahan dinamik dan lebih baik mencegah serangan robot dan keretakan kekerasan.

Kami boleh menambah kod berikut dalam fail config.php untuk menetapkan corak url untuk menjana kod pengesahan:

'captcha'    => true,

Ini akan menjana alamat URL lalai, seperti yang ditunjukkan di bawah:

<img src="__APP__/Public/verify/" onclick="this.src=&#39;__APP__/Public/verify/&#39;+Math.random()">

__APP__ di sini ialah pembolehubah yang disediakan oleh sistem, yang menunjukkan direktori akar aplikasi semasa, dan pengesahan ialah nama kaedah pengawal tempat kami menjana kod pengesahan.

Kaedah ini mungkin menghadapi masalah cache penyemak imbas dan membuat halaman menjadi kembung. Oleh itu, kami juga boleh menggunakan kod JavaScript khusus untuk mengosongkan cache penyemak imbas semasa menjana kod pengesahan untuk menyelesaikan masalah ini.

Dalam halaman HTML, kita boleh menulis seperti ini:

<img src="__APP__/Public/verify/" onclick="this.src=&#39;__APP__/Public/verify/&#39;+Math.random()">

Dalam JavaScript, kita boleh menulis seperti ini:

$(function(){
    $('#verify_img').click(function(){
        var timenow = new Date().getTime();
        $(this).attr('src','/Home/Public/verify/' + timenow);
    });
});

Kod JavaScript ini akan digunakan setiap masa Apabila anda mengklik imej kod pengesahan, cap masa dijana secara dinamik dan menjadi sebahagian daripada URL, memastikan setiap kali anda mengakses kod pengesahan, ia adalah alamat URL baharu, dengan itu berkesan mengelakkan masalah caching penyemak imbas.

Ringkasan

Melalui penyelesaian biasa di atas, kami boleh menyelesaikan masalah kod pengesahan ThinkPHP3.2.3 yang tidak dipaparkan dengan berkesan. Dalam projek pembangunan sebenar, kami juga perlu mengikut spesifikasi ini untuk memastikan operasi normal program dan melindungi privasi pengguna dan keselamatan data dengan lebih baik. Pada masa yang sama, kita harus sentiasa memberi perhatian kepada isu keselamatan, terus belajar dan meneroka teknologi baharu untuk mencegah serangan tapak web dan melindungi keselamatan tapak web.

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika kod pengesahan thinkphp3.2.3 tidak dipaparkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn