Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Melaksanakan Fungsi 'Ingat Saya' dengan Selamat dalam Sistem Log Masuk PHP Menggunakan Kuki Berterusan?

Bagaimana untuk Melaksanakan Fungsi 'Ingat Saya' dengan Selamat dalam Sistem Log Masuk PHP Menggunakan Kuki Berterusan?

Susan Sarandon
Susan Sarandonasal
2024-11-10 00:36:02482semak imbas

How to Securely Implement

Kuki Berterusan untuk Fungsi Selamat "Ingat Saya" dalam Sistem Log Masuk PHP

Pengenalan

Melaksanakan ciri "ingat saya" dalam sistem log masuk PHP memerlukan menyimpan kuki selamat dalam pengguna pelayar. Kuki ini membenarkan pengguna kekal log masuk walaupun selepas menutup penyemak imbas mereka atau memulakan semula peranti mereka.

Struktur Pangkalan Data

Untuk menyimpan maklumat ingat saya dengan selamat, cipta jadual berasingan dalam pangkalan data anda:

CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);

Medan pemilih dan token akan digunakan untuk menyimpan ingat saya maklumat.

Selepas Log Masuk

Apabila pengguna log masuk dan memilih pilihan "ingat saya", jana pemilih rawak (12 aksara) dan pengesah (33 bait) menggunakan fungsi random_bytes() atau kaedah yang serupa untuk memastikan kerawak.

Tetapkan kuki ingat saya menggunakan kod berikut:

setcookie(
    'remember',
    $selector . ':' . base64_encode($authenticator),
    time() + 864000, // expires in 10 days
    '/',
    'yourdomain.com',
    true, // TLS-only
    true  // http-only
);

Masukkan pemilih, pengesah cincang, ID pengguna dan masa tamat tempoh ke dalam jadual auth_tokens.

Mengesah Semula pada Muatan Halaman

Pada halaman berikutnya dimuatkan, jika pengguna belum log masuk dan ingat saya kuki ditetapkan:

  1. Ekstrak pemilih dan pengesah daripada kuki.
  2. Soal jadual auth_tokens untuk baris dengan pemilih yang sepadan.
  3. Bandingkan cincangan yang dikira daripada pengesah yang diekstrak dengan pengesah cincang tersimpan menggunakan hash_equals().
  4. Jika cincangan sepadan, log masuk pengguna dengan menetapkan data sesi dan menjana semula token log masuk.

Butiran

  • Kerintangan Perlanggaran: Pemilih 9 bait menyediakan 72 bit rintangan perlanggaran dan pengesah 33 bait menyediakan 264 bit.
  • Pengesah Pencirian: Menyimpan cincang SHA256 pengesah mengurangkan risiko yang berkaitan dengan kebocoran maklumat.
  • Perbandingan Masa Malar: The medan pemilih dan pengesah yang berasingan menghapuskan kemungkinan serangan pemasaan pada carian pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi 'Ingat Saya' dengan Selamat dalam Sistem Log Masuk PHP Menggunakan Kuki Berterusan?. 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