Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh melaksanakan ciri 'Ingat Saya' yang selamat menggunakan PHP dan kuki?

Bagaimanakah saya boleh melaksanakan ciri 'Ingat Saya' yang selamat menggunakan PHP dan kuki?

Susan Sarandon
Susan Sarandonasal
2024-11-11 00:26:02684semak imbas

How can I implement a secure

Sistem log masuk PHP: Ingat Saya (kuki berterusan)

Pengenalan

Melaksanakan ciri "ingat saya" membenarkan pengguna untuk kekal log masuk walaupun selepas menutup pelayar mereka. Ciri ini meningkatkan kemudahan pengguna dan menambah baik keseluruhan pengalaman pengguna. Dalam artikel ini, kami akan menyelidiki cara selamat untuk menyimpan dan mengesahkan kuki dalam penyemak imbas pengguna untuk mekanisme log masuk yang berterusan.

Menyimpan Kuki dengan Selamat

Untuk selamat simpan kuki, kami menggunakan jadual berasingan dalam pangkalan data:

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`)
);

Proses Selepas Log Dalam

Setelah log masuk berjaya dengan pilihan "ingat saya" didayakan:

  • Jana pemilih 12 aksara (cth., menggunakan base64_encode(random_bytes(9))).
  • Jana pengesah 33 bait (cth., menggunakan random_bytes(33)).
  • Tetapkan kuki dengan nilai berikut:

    'remember': $selector.':'.base64_encode($authenticator)
  • Simpan pemilih, pengesah cincang, ID pengguna dan tarikh tamat tempoh dalam jadual pangkalan data auth_tokens.

Pengesahan Semula pada Halaman Muatkan

Untuk mengesahkan semula pengguna:

if (empty($_SESSION['userid']) && !empty($_COOKIE['remember'])) {
    list($selector, $authenticator) = explode(':', $_COOKIE['remember']);

    $row = $database->selectRow(
        "SELECT * FROM auth_tokens WHERE selector = ?",
        [
            $selector
        ]
    );

    if (hash_equals($row['token'], hash('sha256', base64_decode($authenticator)))) {
        $_SESSION['userid'] = $row['userid'];
        // Regenerate login token and update database
    }
}

Butiran Pendekatan

  • Ketahanan Perlanggaran : Menggunakan 9 bait untuk pemilih menyediakan 72 bit ruang kekunci, memastikan rintangan perlanggaran yang mencukupi.
  • Perlindungan Penyamaran: Menyimpan pengesah yang dicincang dalam pangkalan data mengurangkan risiko penyamaran.
  • Langkah Balas Serangan Masa: Mencirikan nilai pengesahan. sebelum membandingkan dan memisahkan pemilih daripada pengesah menghalang kebocoran masa.
  • Keselamatan Pangkalan Data: Jadual auth_tokens membolehkan pemadaman dan tamat tempoh token yang telah tamat tempoh dengan mudah, mengekalkan integriti pangkalan data.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan ciri 'Ingat Saya' yang selamat menggunakan PHP dan kuki?. 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