Bagaimana cara membuat php membuat saya tetap masuk?

Ketika pengguna masuk ke aplikasi web dan kemudian menutup browser web, cookie sesi yang terkait dengan login segera kedaluwarsa. Artinya, jika pengguna mengakses aplikasi web nanti, mereka harus masuk lagi

Fitur ingat saya memungkinkan pengguna untuk menyimpan login mereka untuk beberapa waktu, bahkan setelah menutup browser web. Untuk menerapkan fitur ingat saya, Anda akan menggunakan cookie dengan waktu kedaluwarsa di masa mendatang

Cara yang umum tetapi tidak aman

Cara tidak aman untuk mengimplementasikan ingat saya adalah menambahkan id pengguna ke cookie dengan waktu kedaluwarsa

user_id=120

Code language: PHP (php)

Saat pengguna mengakses aplikasi web, Anda memeriksa apakah id pengguna di cookie valid sebelum memasukkannya secara otomatis

Pendekatan naif ini hanya mengandalkan cookie, yang tidak aman karena alasan berikut

  • Pertama, pengguna dapat mengubah id ke yang lain untuk masuk sebagai pengguna lain
  • Kedua, id pengguna dapat mengungkapkan jumlah pengguna dalam sistem

Pendekatan yang lebih aman

Cara yang lebih aman untuk mengimplementasikan fitur ingat saya adalah dengan menyimpan token acak alih-alih id pengguna di cookie dan server basis data

Nilai dalam cookie akan terlihat seperti ini

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_

Dan inilah tabel database yang menyimpan token

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)

Saat pengguna mengakses aplikasi web, Anda mencocokkan token cookie dengan yang disimpan di database. Selain itu, Anda dapat memeriksa waktu kedaluwarsa token. Jika token cocok dan belum kedaluwarsa, Anda bisa mendapatkan id pengguna yang terkait dengan token dan memasukkan pengguna secara otomatis

Kueri untuk mencocokkan token akan terlihat seperti ini

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)

Pendekatan ini memecahkan dua masalah di atas

  • Pertama, token lebih menantang untuk ditebak
  • Kedua, token tidak mengungkapkan jumlah pengguna

Namun, pendekatan ini memperlihatkan masalah keamanan lain yang dikenal sebagai serangan waktu

Ketika database membandingkan token cookie dengan token yang disimpan dalam database, ia mengembalikan waktu perbandingan yang berbeda sesuai dengan seberapa mirip dua token tersebut.

Misalnya, jika Anda menyimpan token berikut di cookie

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_

Dan token berikut dalam database

6f9a1ef3020bb8351456cd65176e1e62ceeefcdca0a750201886a230f8736cad

Code language: PHP (php)

Saat membandingkan token ini, database membandingkan setiap karakter dalam token dan berhenti mencocokkan saat menemukan ketidakcocokan. Dalam contoh ini, database berhenti pada karakter kedua

Namun, saat membandingkan pasangan token berikut

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
_

Basis data berhenti mencocokkan setelah membandingkan karakter terakhir kedua

Waktu pembandingan pada contoh kedua akan selalu lebih besar daripada yang kedua karena basis data perlu membandingkan lebih banyak karakter

Dengan menguji token yang berbeda, Anda bisa mendapatkan waktu respons yang berbeda. Dengan kata lain, waktunya bocor. Untuk menghindari kebocoran waktu, fungsi perbandingan perlu mengembalikan waktu yang konstan terlepas dari tokennya

Mencegah serangan waktu

Berikut ini menunjukkan cara mencegah serangan waktu seperti yang diusulkan oleh P. I. E. Dalam pendekatan ini, alih-alih menyimpan satu token di cookie, Anda menyimpan sepasang token.

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
6 dan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
7 dengan format.

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
_8

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
_6 adalah untuk memilih

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
7 yang disimpan dalam database. Dalam database, Anda menyimpan hash

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
_6 dan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
7

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)

Untuk mem-hash validator, Anda menggunakan fungsi password_hash()

Untuk mendapatkan id pengguna, Anda mencocokkan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
_6 dari cookie dengan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
6 dari database

SELECT id, selector, hashed_validator, user_id, expiry FROM user_tokens WHERE selector = :selector

Code language: PHP (php)

Jika kueri mengembalikan baris, Anda dapat mencocokkan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
7 dari cookie dengan

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
6 menggunakan fungsi

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
7

Jika validator cocok, Anda dapat memasukkan pengguna dengan

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
8 secara otomatis

Bagian berikut akan menyempurnakan sistem login dengan menambahkan fitur ingat saya menggunakan pendekatan ketiga

Buat tabel user_token untuk menyimpan token

Pernyataan berikut membuat tabel

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
9 yang menyimpan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
6, hash

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
7,

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
2, dan id pengguna

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)

Tambahkan kotak centang ingat saya ke formulir login

Pertama, tambahkan kotak centang ingat saya ke formulir login di file

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
3

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_0

Kedua, tambahkan kode untuk menangani kotak centang ingat saya ke file

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
4

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_1

Di

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_4, tambahkan kotak centang ingat saya ke pemanggilan fungsi filter()

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_2

Juga, tambahkan parameter ketiga ke fungsi login()

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_3

Kami akan kembali untuk menyempurnakan fungsi

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_6 nanti

Tentukan fungsi untuk menangani fitur ingat saya

Pertama, buat file

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_7 di folder

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
8

Kedua, tentukan fungsi baru berikut untuk menangani token di file

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
7

Hasilkan token

Berikut ini mendefinisikan

6f9a1ef3020bb8351456cd65176e1e62ceeefcdca0a750201886a230f8736cad

Code language: PHP (php)
0 untuk menghasilkan sepasang token acak yang disebut pemilih dan validator

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_4

Fungsi

6f9a1ef3020bb8351456cd65176e1e62ceeefcdca0a750201886a230f8736cad

Code language: PHP (php)
_0 mengembalikan array dari tiga elemen.

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
6,

6f9a1ef3020bb8351456cd65176e1e62ceeefcdca0a750201886a230f8736cad

Code language: PHP (php)
3, dan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
8

Parse token

Fungsi

6f9a1ef3020bb8351456cd65176e1e62ceeefcdca0a750201886a230f8736cad

Code language: PHP (php)
_5 berikut membagi token yang disimpan dalam cookie menjadi

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
6 dan

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
7

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_5

Masukkan token pengguna baru

Fungsi

6f9a1ef3020bb8351456cd65176e1e62ceeefcdca0a750201886a230f8736cad

Code language: PHP (php)
_8 berikut menambahkan baris baru ke tabel

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
9

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_6

Temukan token oleh pemilih

Fungsi

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
_0 berikut menemukan baris dalam tabel

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
9 oleh pemilih. Itu hanya mengembalikan pemilih pertandingan jika token tidak kedaluwarsa dengan membandingkan kedaluwarsa dengan waktu saat ini

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_7

Hapus token pengguna

Fungsi

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
_2 berikut menghapus semua token yang terkait dengan pengguna

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_8

Temukan pengguna dengan token

Fungsi

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
_3 berikut mengembalikan

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
8 dan

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
5 dengan token

remember_me=6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
_9

Periksa apakah token valid

Fungsi

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
_6 berikut menguraikan token yang disimpan dalam cookie (

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
8) dan mengembalikan

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
8 jika token tersebut valid dan tidak kedaluwarsa

fungsi token_is_valid(string $token). bool { // parse token untuk mendapatkan pemilih dan validator [$selector, $validator] = parse_token($token);

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
0

Memodifikasi fungsi di auth. php

Berikut ini menjelaskan perubahan fungsi dalam file

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
9

Fungsi login()

Berikut ini menambahkan parameter ketiga

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)
_0 ke fungsi

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91

Code language: PHP (php)
6

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
1

Jika

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)
0 adalah

6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91 6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d92

Code language: PHP (php)
8, panggil fungsi

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)
4

Fungsi log_user_in()

Fungsi log_user_in() mencatat pengguna

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
2

Fungsi reminder_me()

Berikut ini mendefinisikan fungsi ________14______4

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: SQL (Structured Query Language) (sql)
_3

Fungsi

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)
_4 menyimpan login untuk pengguna selama beberapa hari tertentu. Secara default, ini mengingat login selama 30 hari

Fungsi

CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, selector VARCHAR(255) NOT NULL, hashed_validator VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

Code language: PHP (php)
_4 melakukan hal berikut

  • Pertama, buat

    CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

    Code language: SQL (Structured Query Language) (sql)
    6,

    CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

    Code language: SQL (Structured Query Language) (sql)
    7, dan token (

    CREATE TABLE user_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, token VARCHAR(255) NOT NULL, expiry DATETIME NOT NULL, user_id INT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE );

    Code language: SQL (Structured Query Language) (sql)
    8)
  • Kedua, masukkan baris baru ke dalam tabel

    SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

    Code language: PHP (php)
    9
  • Ketiga, atur cookie dengan waktu kedaluwarsa yang ditentukan

Fungsi logout()

Jika pengguna keluar, selain menghapus sesi, Anda perlu menghapus catatan di tabel

SELECT user_id FROM user_tokens WHERE token = '6179f9c66a9d007e689c7809b5d8320a6692787773488f12a4330cd5ffd25d91' and expiry > NOW()

Code language: PHP (php)
9 dan menghapus cookie

SELECT id, selector, hashed_validator, user_id, expiry FROM user_tokens WHERE selector = :selector

Code language: PHP (php)
3

Bagaimana cara membuat situs web tetap masuk?

6. Arahkan ke situs mana pun yang Anda inginkan untuk tetap masuk. Masukkan nama pengguna dan kata sandi Anda seperti biasa, lalu pilih opsi kotak centang yang disediakan untuk tetap masuk . Itu akan diberi label dengan "Ingat saya," "Tetap masuk" atau kata-kata lain yang menyatakan bahwa memilihnya akan memungkinkan Anda untuk tetap masuk.

Bagaimana cara menambahkan ingat saya ke halaman login saya?

Buka Pendaftaran Pengguna > Pengaturan > Umum > Opsi Masuk dan klik 'Aktifkan Ingat Saya' .

Bagaimana cara menerapkan fungsi mengingat saya di PHP?

Login PHP dengan fungsi ingat saya .
Fungsi reminder me digunakan untuk menyimpan username dan password pada form login yang dimasukkan oleh user. .
Langkah 2. Buat tbluser tabel SQL
Langkah 3. Buat file konfigurasi database config. php
Langkah 4. PHP Cookies untuk mengingat username dan password. .
Lihat Demo————————————————–

Berapa lama Anda harus membuat pengguna tetap masuk?

Dianggap bahwa waktu tunggu menganggur yang lebih lama ( 15-30 menit ) dapat diterima untuk aplikasi berisiko rendah. Di sisi lain, NIST merekomendasikan agar pembuat aplikasi membuat penggunanya mengautentikasi ulang setiap 12 jam dan menghentikan sesi setelah 30 menit tidak aktif.