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
Lepaskan: 2024-11-11 00:26:02
asal
649 orang telah melayarinya

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`)
);
Salin selepas log masuk

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)
    Salin selepas log masuk
  • 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
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan