Sesi login php dengan database

Pada topik kali ini, kita akan mempelajari cara membuat Sistem Login MySQL PHP dengan bantuan PHP dan database MySQL. Ada beberapa langkah yang diberikan untuk membuat sistem login dengan database MySQL

Sebelum membuat sistem login terlebih dahulu, kita perlu mengetahui prasyarat untuk membuat modul login

Persyaratan

  • Kita harus memiliki pengetahuan tentang HTML, CSS, PHP dan MySQL untuk membuat sistem login
  • Editor Teks - Untuk menulis kode. Kita bisa menggunakan editor teks apapun seperti Notepad, Notepad++, Dreamweaver, dll
  • XAMPP - XAMPP adalah perangkat lunak lintas platform, yang merupakan singkatan dari Cross-platform(X) Apache server (A), MySQL (M), PHP (P), Perl (P). XAMPP adalah paket perangkat lunak yang lengkap, jadi kita tidak perlu menginstal semuanya secara terpisah

Pengaturan Lingkungan

Sekarang, kita perlu memulai server web dan membuat file untuk sistem login. Ada beberapa langkah yang diberikan di bawah ini untuk mengatur lingkungan

  • Buka Panel Kontrol XAMPP
  • Mulai server Apache dengan mengklik tombol Mulai
  • Mulai MySQL dengan mengklik tombol Mulai
  • Buat semua file yang diperlukan untuk login
  • Buat tabel login di database menggunakan phpMyAdmin di XAMPP

Sekarang, kita akan membuat empat file di sini untuk sistem login

  1. indeks. html - File ini dibuat untuk tampilan GUI dari halaman login dan validasi bidang kosong
  2. gaya. css - File ini dibuat untuk tampilan form login yang menarik
  3. koneksi. php - File koneksi berisi kode koneksi untuk konektivitas basis data
  4. autentikasi. php - File ini memvalidasi data formulir dengan database yang dikirimkan oleh pengguna

Simpan semua file ini di folder htdocs di dalam folder instalasi Xampp. Penjelasan rinci dan kode untuk file-file ini dibahas di bawah ini

indeks. html

Pertama, kita perlu mendesain formulir login untuk pengguna situs web untuk berinteraksi dengannya. Form login ini dibuat menggunakan html dan juga berisi validasi field kosong, yang ditulis dalam JavaScript. Kode untuk index. html diberikan di bawah ini

Setelah mengeksekusi kode di atas pada browser, akan muncul halaman login seperti di bawah ini jika tidak memuat style. file css

Sesi login php dengan database

gaya. css

Sekarang, kita akan membuat gaya. css untuk memberikan tampilan yang lebih menarik pada form login. Kode CSS untuk gaya. file css diberikan di bawah ini

Setelah memasukkan file CSS di atas dalam index. html, form loginnya akan seperti -

Sesi login php dengan database

Catatan. Semua file ini harus disimpan dalam folder yang sama, sehingga kita dapat mengaksesnya dengan mudah tanpa gangguan

Pembuatan Database dan Tabel

Sekarang, langkah selanjutnya adalah membuat database dan tabel login di dalam database

  • Akses phpMyAdmin di browser menggunakan localhost/phpmyadmin/ dan buat tabel di database. Di sini kita akan membuat database dan tabel menggunakan phpMyAdmin berbasis GUI daripada eksekusi kueri
  • Klik New dan masukkan nama database dan kemudian klik tombol Create
Sesi login php dengan database
  • Sekarang kita akan membuat tabel login di database. Buat tabel dengan nama login di database yang telah Anda buat tadi
Sesi login php dengan database
  • Tentukan kolom Nama dan Jenis dan Panjangnya di tabel tempat kami akan menyimpan nama pengguna dan kata sandi untuk pengguna yang berbeda dan menyimpannya dengan mengklik tombol simpan
Sesi login php dengan database
  • Klik sisipkan, dari mana kita bisa menyisipkan catatan di kolom. Jadi masukkan nama pengguna dan kata sandi di sini dan klik tombol Go untuk menyimpan catatan
Sesi login php dengan database

koneksi. php

Langkah selanjutnya adalah melakukan konektivitas form login dengan database yang telah kita buat pada langkah sebelumnya. Kami akan membuat koneksi. php yang kodenya diberikan di bawah ini

autentikasi. php

Sekarang, kami telah menyiapkan basis data kami, sehingga kami dapat melanjutkan dengan otentikasi pengguna. File ini menangani data form login yang dikirimkan melalui index. html. Ini memvalidasi data yang dikirim melalui formulir login, jika nama pengguna dan kata sandi cocok dengan database, maka login akan berhasil jika tidak, login akan gagal

Buka editor kode favorit Anda, buat skrip PHP kosong, lalu simpan sebagai “myApp. php” di dalam direktori pilihan Anda

 

Catatan. Anda memerlukan lingkungan pengembangan PHP lokal yang berfungsi (seperti XAMPP)

Jika Anda memerlukan bantuan untuk menyetelnya, bacalah bab Memulai dari saya

 

Selanjutnya, Anda perlu terhubung ke database SQL Anda

Cara terbaik untuk melakukannya adalah dengan membuat file "include" terpisah dengan kode koneksi, seperti yang diambil dari tutorial MySQL saya

 

<?php
/* Host name of the MySQL server */
$host = 'localhost';
/* MySQL account username */
$user = 'myUser';
/* MySQL account password */
$passwd = 'myPasswd';
/* The schema you want to use */
$schema = 'mySchema';
/* The PDO object */
$pdo = NULL;
/* Connection string, or "data source name" */
$dsn = 'mysql:host=' . $host . ';dbname=' . $schema;
/* Connection inside a try/catch block */
try
{  
   /* PDO object creation */
   $pdo = new PDO($dsn, $user,  $passwd);
   
   /* Enable exceptions on errors */
   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
   /* If there is an error an exception is thrown */
   echo 'Database connection failed.';
   die();
}

Ubah parameter koneksi sesuai kebutuhan, lalu simpan kode di atas sebagai skrip PHP bernama “db_inc. php” di dalam direktori yang sama dari myApp. php

Setiap kali Anda perlu menggunakan database, cukup sertakan file ini dan objek koneksi $pdo akan tersedia sebagai variabel global

Jadi, kembali ke myApp. php dan sertakan file koneksi database

<?php
require './db_inc.php';
_

 

Sangat berguna, bukan?

Sekarang, buat satu skrip PHP lagi yang akan berisi kelas Akun (untuk saat ini biarkan kosong, Anda akan kembali lagi nanti). Simpan sebagai “account_class. php” di dalam direktori yang sama

Sama seperti untuk db_inc. php, Anda dapat menyertakan skrip ini setiap kali Anda perlu menggunakan kelas Akun di salah satu aplikasi Anda

Ayo lakukan itu segera di myApp. php

<?php
require './db_inc.php';
require './account_class.php';

 

Ini dia

Hal terakhir yang harus dilakukan adalah memulai Sesi PHP. Ini mudah dilakukan dengan fungsi session_start()

session_start() harus dipanggil sebelum output apa pun dikirim ke klien jarak jauh, oleh karena itu merupakan praktik yang baik untuk memanggilnya sebelum menyertakan skrip lain

Anda dapat melakukan ini di myApp. php seperti ini

<?php
session_start();
require './db_inc.php';
require './account_class.php';

 

Sangat baik

Sekarang mari selami detailnya, mulai dari struktur database

 

Langkah 2 . Struktur Basis Data

Bab ini akan menunjukkan dengan tepat bagaimana menyiapkan tabel database yang digunakan oleh kelas Akun

Anda akan mendapatkan petunjuk langkah demi langkah untuk membuat tabel sendiri, termasuk kode SQL lengkapnya

Anda akan menyelesaikan langkah ini dalam waktu singkat

Mari kita mulai

 

Sesi login php dengan database

Sekarang, Anda akan membuat tabel database tempat data akun disimpan

Jika Anda tidak terbiasa dengan database atau jika Anda tidak tahu persis cara menggunakan PHP dengan MySQL, Anda dapat menemukan semua yang Anda butuhkan di sini

  • Cara menggunakan PHP dengan MySQL. panduan lengkap

 

Kelas Akun menggunakan dua tabel MySQL

  • akun
  • sesi_akun

Tabel akun berisi semua akun terdaftar bersama dengan beberapa informasi dasar. nama pengguna, hash kata sandi, waktu pendaftaran dan status (diaktifkan atau dinonaktifkan)

 

Kolom tabel spesifik adalah

  • ID Akun. pengidentifikasi unik akun (ini adalah kunci utama tabel)
  • nama akun. nama yang digunakan untuk masuk, atau hanya "nama pengguna" (setiap nama harus unik di dalam tabel)
  • akun_passwd. hash kata sandi, dibuat dengan password_hash()
  • akun_reg_time. stempel waktu pendaftaran (ketika akun telah dibuat)
  • akun_diaktifkan. apakah akun diaktifkan atau dinonaktifkan, berguna untuk menonaktifkan akun tanpa menghapusnya dari database

Catatan. Untuk tutorial ini, saya menganggap Skema MySQL bernama mySchema. Jika Anda menggunakan nama skema yang berbeda, pastikan untuk mengubah semua kode contoh yang sesuai (cukup cari "mySchema" dan ganti dengan milik Anda)

 

Beginilah tampilan tabel ini di phpMyAdmin

 

Sesi login php dengan database

 

Seperti yang Anda lihat, ini adalah tabel yang sangat sederhana

(Dalam bab berikutnya Anda akan melihat dengan tepat bagaimana setiap kolom digunakan. )

Berikut adalah kode SQL untuk membuat tabel termasuk indeks

 

--
-- Table structure for table `accounts`
--
CREATE TABLE `accounts` (
  `account_id` int(10) UNSIGNED NOT NULL,
  `account_name` varchar(255) NOT NULL,
  `account_passwd` varchar(255) NOT NULL,
  `account_reg_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `account_enabled` tinyint(1) UNSIGNED NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Indexes for table `accounts`
--
ALTER TABLE `accounts`
  ADD PRIMARY KEY (`account_id`),
  ADD UNIQUE KEY `account_name` (`account_name`);
--
-- AUTO_INCREMENT for table `accounts`
--
ALTER TABLE `accounts`
  MODIFY `account_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
_

 

Untuk membuat tabel dengan phpMyAdmin, pertama pilih Skema Anda dari daftar di sebelah kiri, lalu klik tab SQL dan rekatkan kode

1 – Pilih Skema Anda dari menu sebelah kiri

Sesi login php dengan database

2 – Klik tab “SQL” di menu atas

Sesi login php dengan database

3 – Rekatkan kode SQL di bidang teks

Sesi login php dengan database

4 – Klik “Go” di pojok kanan bawah

Sesi login php dengan database

Tabel account_sessions berisi ID Sesi yang digunakan untuk autentikasi berbasis Sesi

Berikut kolom tabelnya

  • session_id. ID Sesi PHP dari klien yang diautentikasi (ini juga merupakan kunci utama)
  • ID Akun. ID akun (menunjuk ke kolom account_id dari tabel akun)
  • login_time. stempel waktu login sesi (berguna untuk menangani batas waktu sesi)

Beginilah tampilan tabel ini di PhpMyAdmin

 

Sesi login php dengan database

 

Dan berikut adalah kode SQL untuk membuat tabel

 

--
-- Table structure for table `account_sessions`
--
CREATE TABLE `account_sessions` (
  `session_id` varchar(255) NOT NULL,
  `account_id` int(10) UNSIGNED NOT NULL,
  `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Indexes for table `account_sessions`
--
ALTER TABLE `account_sessions`
  ADD PRIMARY KEY (`session_id`);

Buat tabel account_sessions dengan mengikuti langkah yang sama untuk tabel akun

 

Itu dia

Anda baru saja selesai mengatur database Anda

Mari beralih ke bab berikutnya (sekarang kesenangan sesungguhnya dimulai…. )

 

Langkah 3 . Tambah, Edit, dan Hapus Akun

Sekarang Anda akan belajar dengan tepat bagaimana menangani akun Anda

Anda akan menerapkan metode kelas untuk menambahkan akun baru dan mengedit serta menghapusnya

Mari selami

 

Sesi login php dengan database

Sekarang, saatnya menulis kelas Akun

Buka kelas_akun. skrip php yang Anda simpan sebelumnya dan tulis struktur kelas dasar

 

<?php
class Account
{
	/* Class properties (variables) */
	
	/* The ID of the logged in account (or NULL if there is no logged in account) */
	private $id;
	
	/* The name of the logged in account (or NULL if there is no logged in account) */
	private $name;
	/* TRUE if the user is authenticated, FALSE otherwise */
	private $authenticated;
	
	
	/* Public class methods (functions) */
	
	/* Constructor */
	public function __construct()
	{
		/* Initialize the $id and $name variables to NULL */
		$this->id = NULL;
		$this->name = NULL;
		$this->authenticated = FALSE;
	}
	
	/* Destructor */
	public function __destruct()
	{
		
	}
}
_

 

Untuk saat ini, hanya ada konstruktor, destruktor, dan dua properti kelas (yang akan berisi ID akun, nama akun, dan flag yang diautentikasi disetel ke TRUE setelah login berhasil, seperti yang akan Anda lihat di bab berikutnya)

 

Sebelum melanjutkan, mari kita lihat bagaimana kesalahan ditangani

Banyak kesalahan yang berbeda dapat terjadi (nama pengguna tidak valid, kueri basis data gagal...), dan setiap metode kelas harus dapat menandakan kesalahan tersebut kepada pemanggil

Ini dilakukan dengan Pengecualian

Jika Anda tidak pernah menggunakan pengecualian sebelumnya, jangan khawatir. mereka lebih mudah dari yang Anda pikirkan

Dan Anda akan melihat dengan tepat bagaimana menggunakannya dengan contoh berikutnya

 

Baiklah

Mari kita mulai dengan metode kelas satu. menambahkan akun()

 

Cara Menambahkan Akun Baru

Sesi login php dengan database

Fungsi ini menambahkan akun baru ke database

Ini mengembalikan ID akun baru (yaitu, nilai account_id dari tabel akun) jika berhasil. Jika operasi gagal, pengecualian dengan pesan kesalahan tertentu akan muncul

Mari kita lihat kodenya

 

/* Add a new account to the system and return its ID (the account_id column of the accounts table) */
public function addAccount(string $name, string $passwd): int
{
	/* Global $pdo object */
	global $pdo;
	
	/* Trim the strings to remove extra spaces */
	$name = trim($name);
	$passwd = trim($passwd);
	
	/* Check if the user name is valid. If not, throw an exception */
	if (!$this->isNameValid($name))
	{
		throw new Exception('Invalid user name');
	}
	
	/* Check if the password is valid. If not, throw an exception */
	if (!$this->isPasswdValid($passwd))
	{
		throw new Exception('Invalid password');
	}
	
	/* Check if an account having the same name already exists. If it does, throw an exception */
	if (!is_null($this->getIdFromName($name)))
	{
		throw new Exception('User name not available');
	}
	
	/* Finally, add the new account */
	
	/* Insert query template */
	$query = 'INSERT INTO myschema.accounts (account_name, account_passwd) VALUES (:name, :passwd)';
	
	/* Password hash */
	$hash = password_hash($passwd, PASSWORD_DEFAULT);
	
	/* Values array for PDO */
	$values = array(':name' => $name, ':passwd' => $hash);
	
	/* Execute the query */
	try
	{
		$res = $pdo->prepare($query);
		$res->execute($values);
	}
	catch (PDOException $e)
	{
	   /* If there is a PDO exception, throw a standard exception */
	   throw new Exception('Database query error');
	}
	
	/* Return the new ID */
	return $pdo->lastInsertId();
}

 

Izinkan saya menjelaskan semua langkahnya

Sebelum menambahkan akun baru ke database, addAccount() melakukan beberapa pemeriksaan pada variabel input untuk memastikannya sudah benar

Secara khusus

  • itu memanggil isNameValid(), metode kelas yang mengembalikan BENAR jika string yang diteruskan bisa menjadi nama pengguna yang valid
  • lalu, memanggil isPasswdValid(), yang mengembalikan BENAR jika string yang diteruskan dapat berupa sandi yang valid
  • akhirnya, itu memanggil getIdFromName(). metode ini mencari nama pengguna yang diteruskan di database, dan mengembalikan akun_id jika ada atau NULL jika tidak

 

Jika nama pengguna yang diteruskan ke addAccount() tidak valid (misalnya, terlalu pendek), pengecualian akan dilemparkan dan metode menghentikan eksekusinya

Demikian pula, pengecualian dilemparkan jika kata sandi tidak valid atau jika nama pengguna tidak tersedia

Jika semuanya baik-baik saja, akun baru akhirnya ditambahkan ke database dan ID-nya dikembalikan

(Pengecualian juga dilemparkan jika pengecualian PDO tertangkap, artinya ada kesalahan saat menjalankan kueri SQL)

Bacaan yang disarankan. Cara hash password di PHP

 

Ini kode lengkap isNameValid(), isPasswdValid() dan getIdFromName()

 

/* A sanitization check for the account username */
public function isNameValid(string $name): bool
{
	/* Initialize the return variable */
	$valid = TRUE;
	
	/* Example check: the length must be between 8 and 16 chars */
	$len = mb_strlen($name);
	
	if (($len < 8) || ($len > 16))
	{
		$valid = FALSE;
	}
	
	/* You can add more checks here */
	
	return $valid;
}
/* A sanitization check for the account password */
public function isPasswdValid(string $passwd): bool
{
	/* Initialize the return variable */
	$valid = TRUE;
	
	/* Example check: the length must be between 8 and 16 chars */
	$len = mb_strlen($passwd);
	
	if (($len < 8) || ($len > 16))
	{
		$valid = FALSE;
	}
	
	/* You can add more checks here */
	
	return $valid;
}
/* Returns the account id having $name as name, or NULL if it's not found */
public function getIdFromName(string $name): ?int
{
	/* Global $pdo object */
	global $pdo;
	
	/* Since this method is public, we check $name again here */
	if (!$this->isNameValid($name))
	{
		throw new Exception('Invalid user name');
	}
	
	/* Initialize the return value. If no account is found, return NULL */
	$id = NULL;
	
	/* Search the ID on the database */
	$query = 'SELECT account_id FROM myschema.accounts WHERE (account_name = :name)';
	$values = array(':name' => $name);
	
	try
	{
		$res = $pdo->prepare($query);
		$res->execute($values);
	}
	catch (PDOException $e)
	{
	   /* If there is a PDO exception, throw a standard exception */
	   throw new Exception('Database query error');
	}
	
	$row = $res->fetch(PDO::FETCH_ASSOC);
	
	/* There is a result: get it's ID */
	if (is_array($row))
	{
		$id = intval($row['account_id'], 10);
	}
	
	return $id;
}
_

 

Baik isNameValid() dan isPasswdValid() bekerja .

Namun, Anda dapat dengan mudah mengeditnya untuk melakukan pemeriksaan tambahan, misalnya memaksa kata sandi memiliki setidaknya satu huruf kapital dan satu digit

Jika Anda ragu tentang metode ini, tinggalkan saya komentar.  

 

Oke, TAPI

Bagaimana Anda menggunakan metode ini dari aplikasi Anda?

Yah, itu sangat sederhana

Inilah yang perlu Anda tulis di dalam myApp. php

 

<?php
session_start();
require './db_inc.php';
require './account_class.php';
$account = new Account();
try
{
	$newId = $account->addAccount('myNewName', 'myPassword');
}
catch (Exception $e)
{
	/* Something went wrong: echo the exception message and die */
	echo $e->getMessage();
	die();
}
echo 'The new account ID is ' . $newId;
_

Mudah dibaca, elegan, dan efisien

 

Baiklah

Mari beralih ke metode selanjutnya. mengedit akun()

 

Cara Mengedit Akun

Sesi login php dengan database

 

Metode ini memungkinkan Anda mengubah nama, kata sandi, atau status (diaktifkan atau dinonaktifkan) dari akun tertentu

Argumen fungsi pertama adalah ID Akun dari akun yang akan diubah

Argumen berikutnya adalah nilai baru yang akan ditetapkan. nama baru, kata sandi baru, dan status baru (sebagai nilai Boolean)

 

Seperti addAccount(), fungsi ini memeriksa validitas parameter sebelum benar-benar memodifikasi akun di database

Nama dan sandi diverifikasi dengan isNameValid() dan isPasswdValid(), metode yang sama digunakan oleh addAccount()

ID akun diverifikasi dengan metode baru. isIdValid()

Juga, nama baru tidak boleh sudah oleh akun lain

Ini kodenya

 

<?php
require './db_inc.php';
_0

 

Dan inilah kode metode isIdValid()

 

<?php
require './db_inc.php';
_1

 

Cara Menghapus Akun

Sesi login php dengan database

 

Metode terakhir dari bab ini adalah deleteAccount()

Ini cukup mudah. dibutuhkan ID akun dan menghapusnya. Sesi akun di dalam tabel akun_sesi juga dihapus

Ini kodenya

 

<?php
require './db_inc.php';
_2

Sangat baik

Anda siap untuk langkah selanjutnya. masuk dan keluar

 

Langkah 4 . Masuk dan Keluar

Dalam bab ini Anda akan mempelajari bagaimana klien jarak jauh dapat masuk (dan keluar) menggunakan kelas Anda

Anda akan melihat caranya

  • login dengan nama pengguna dan kata sandi, dan
  • masuk menggunakan Sesi PHP

Ayo pergi

Sesi login php dengan database

Klien jarak jauh dapat masuk dengan dua cara

Yang pertama adalah cara klasik. dengan memberikan pasangan username dan password. Ini adalah login "nyata".

Setelah berhasil masuk, Sesi untuk klien jarak jauh tersebut dimulai

Cara kedua adalah dengan memulihkan Sesi yang dimulai sebelumnya, tanpa perlu klien memberikan nama dan kata sandi lagi

Mari kita mulai dengan login nama pengguna dan kata sandi

 

Login Dengan Nama Pengguna Dan Kata Sandi

Sesi login php dengan database

Ini dilakukan dengan metode kelas login()

Inilah yang dilakukan fungsi ini

  • ia memeriksa apakah variabel $username dan $password yang disediakan valid. Jika tidak, fungsi segera mengembalikan FALSE (artinya permintaan autentikasi gagal)
  • lalu, di cari username di database account list. Jika ada, periksa kata sandi dengan password_verify()
  • Jika kata sandi cocok maka klien diautentikasi, dan fungsinya menetapkan properti kelas yang terkait dengan akun saat ini (ID dan namanya). Properti $authenticated diatur ke TRUE
  • akhirnya, itu membuat atau memperbarui Sesi klien dan mengembalikan BENAR, yang berarti klien telah berhasil diautentikasi

(Untuk mempelajari lebih lanjut tentang hashing dan verifikasi kata sandi. tutorial hashing kata sandi PHP)

 

Ini kodenya

 

<?php
require './db_inc.php';
_3

isNameValid() dan isPasswdValid() adalah metode yang sama yang sudah Anda ketahui

Yang baru di sini adalah registerLoginSession()

Jadi, apa sebenarnya fungsi ini?

 

Ini sangat mudah

Setelah klien jarak jauh diautentikasi, fungsi ini mendapatkan ID dari Sesi PHP saat ini dan menyimpannya di database bersama dengan ID akun

Dengan cara ini, lain kali klien jarak jauh yang sama akan terhubung, itu akan diautentikasi secara otomatis hanya dengan melihat ID Sesinya

(ID Sesi ditautkan ke browser jarak jauh, sehingga akan tetap sama pada saat berikutnya klien yang sama akan terhubung lagi)

 

Jika Anda tidak terbiasa dengan Sesi, saya sarankan Anda meluangkan beberapa menit untuk membaca panduan saya

  • Sesi PHP menjelaskan

Berikut kode untuk registerLoginSession()

 

<?php
require './db_inc.php';
_4

Izinkan saya menjelaskan cara kerjanya

Ingat tabel account_sessions?

registerLoginSession() menyisipkan baris baru ke dalam tabel tersebut, dengan ID Sesi saat ini (diberikan oleh fungsi session_id()) di kolom session_id, ID akun yang diautentikasi di kolom account_id dan kolom login_time disetel ke stempel waktu saat ini

Sederhananya, kata baris barunya.

“ID Sesi ini (di kolom session_id) milik pengguna jarak jauh yang telah masuk sebagai akun dengan ID ini (di kolom account_id), dan telah masuk saat ini (kolom login_time). ”

 

Jika baris dengan ID Sesi yang sama (yaitu kunci utama tabel) sudah ada, baris tersebut akan diganti

Jika Anda bertanya-tanya apa yang dilakukan perintah SQL "REPLACE", itu persis seperti itu

  • menyisipkan baris baru jika baris lain dengan kunci yang sama (ID Sesi) tidak keluar
  • jika tidak, itu hanya memperbarui baris itu

Sangat berguna 🙂

 

Sekarang mari beralih ke login berbasis Sesi

 

Login berbasis sesi

Sesi login php dengan database

Login berbasis sesi dilakukan dengan metode sessionLogin()

Fungsi ini mendapatkan ID Sesi saat ini (menggunakan session_id()) dan mencarinya ke dalam tabel account_sessions

Jika ada di sana, itu juga memeriksanya

  • Sesi tidak lebih dari 7 hari
  • akun yang ditautkan ke sesi diaktifkan

Jika semuanya baik-baik saja maka klien diautentikasi, properti kelas terkait akun disetel, dan metode mengembalikan BENAR

Jika, karena alasan tertentu, autentikasi gagal maka fungsi mengembalikan FALSE

 

Berikut adalah kode sessionLogin()

 

<?php
require './db_inc.php';
_5

Catatan

Pastikan untuk memeriksa parameter Session Cookie Lifetime dalam konfigurasi PHP Anda (biasanya, file php. berkas ini). Parameter ini diberi nama , dan menentukan berapa detik Session harus tetap dibuka

Setelah itu, Sesi akan ditutup dan ID Sesi baru akan dibuat, memaksa klien jarak jauh dengan Sesi yang kedaluwarsa untuk mengautentikasi lagi dengan nama pengguna dan kata sandi

Nilai defaultnya adalah 0, artinya sebuah Sesi hanya berlangsung hingga browser ditutup. Ini biasanya tidak terlalu berguna, jadi Anda mungkin ingin menyetelnya lebih tinggi, setidaknya untuk beberapa hari

Misalnya, ini adalah cara mengatur Sesi seumur hidup menjadi 7 hari (7 hari = 604800 detik)

sidang. cookie_lifetime=604800

 

Terakhir, mari kita lihat cara keluar dari klien jarak jauh

 

Keluar

Sesi login php dengan database

 

Metode logout() menghapus properti kelas terkait akun ($id dan $name) dan menghapus Sesi saat ini dari tabel akun_sesi

Sesi PHP itu sendiri tidak ditutup karena tidak diperlukan. Selain itu, Sesi mungkin diperlukan oleh bagian lain dari aplikasi web

Namun, Sesi ini tidak lagi dapat digunakan untuk masuk dengan sessionLogin()

Ini kodenya

 

<?php
require './db_inc.php';
_6

Untuk memeriksa apakah pengguna jarak jauh saat ini diautentikasi, Anda dapat menggunakan metode isAuthenticated()

Fungsi ini mengembalikan properti $authenticated, yang disetel ke TRUE setelah autentikasi berhasil

 

<?php
require './db_inc.php';
_7

 

Hei, kamu hampir selesai

Sebelum melihat beberapa contoh kode di bab selanjutnya, ada satu lagi metode bonus yang ingin saya tunjukkan

Fungsi ini menutup semua sesi akun terbuka kecuali sesi saat ini

Dengan kata lain, inilah yang perlu Anda lakukan jika ingin menerapkan fungsi "Keluar dari semua sesi terbuka saya yang lain" yang mungkin Anda lihat di beberapa layanan online (seperti Google atau Facebook)

Bagian terbaik?

Ini sangat sederhana. Ini dia

 

<?php
require './db_inc.php';
_8

Kau berhasil

Dalam bab ini Anda akan menemukan beberapa contoh yang jelas untuk lebih memahami cara menggunakan kelas Akun baru Anda

Anda juga akan menemukan tautan untuk mengunduh seluruh file kelas PHP beserta contohnya

 

Sesi login php dengan database

Bagaimana Anda bisa menggunakan kelas Akun dari aplikasi web Anda?

Mari kita lihat beberapa contoh

Kembali lagi ke myApp Anda. aplikasi contoh php dan buka di editor kode Anda

File Anda akan terlihat seperti ini

 

<?php
require './db_inc.php';
_9

Baiklah

Dalam contoh kode berikut, Anda akan melihat cara melakukan semua operasi kelas Akun yang Anda pelajari di tutorial ini

Untuk mengujinya sendiri, salin cuplikan kode satu per satu dan tempel di myApp. php, setelah kode yang ditunjukkan di atas.

Setelah contoh, Anda juga akan menemukan tautan untuk mengunduh file kelas PHP serta aplikasi myApp. php dengan semua contoh yang ditampilkan di sini

(Catatan. metode getId() dan getName(), yang digunakan dalam contoh berikut, adalah fungsi getter sederhana untuk mendapatkan atribut kelas $id dan $name)

Mari kita mulai

 

1. Masukkan akun baru

<?php
require './db_inc.php';
require './account_class.php';
0

 

2. Mengedit akun

<?php
require './db_inc.php';
require './account_class.php';
1

 

3. Hapus akun

<?php
require './db_inc.php';
require './account_class.php';
2

 

4. Masuk dengan nama pengguna dan kata sandi

<?php
require './db_inc.php';
require './account_class.php';
_3

 

5. Masuk Sesi

<?php
require './db_inc.php';
require './account_class.php';
_4

 

6. Keluar

<?php
require './db_inc.php';
require './account_class.php';
5

 

7. Tutup Sesi terbuka lainnya (jika ada)

<?php
require './db_inc.php';
require './account_class.php';
6

 

Jika Anda memiliki pertanyaan tentang cara menggunakan kelas Akun, tinggalkan komentar di bawah

Klik tautan di bawah untuk mengunduh file ZIP

  • Skrip kelas akun (account_class. php)
  • Aplikasi saya. php file contoh dengan semua contoh penggunaan di atas
  • db_inc. php dengan contoh koneksi PDO

 

Unduh File ZIP

Apakah Anda ingin berbicara dengan saya dan pengembang lain tentang PHP dan pengembangan web? . Kafe Alex PHP

Sampai jumpa di sana 🙂

Langkah 6 . Keamanan Masuk

Keamanan sangat penting untuk aplikasi web

Dalam bab ini Anda akan menemukan beberapa langkah cepat dan dapat ditindaklanjuti untuk menggunakan kelas Akun dengan aman

Ini dia

 

Sesi login php dengan database

Anda tahu bahwa keamanan sangat penting untuk aplikasi web

Dan itu bahkan lebih penting untuk sistem autentikasi web

Jadi

Mari kita lihat langkah-langkah apa yang harus Anda ambil untuk menggunakan kelas ini dengan aman

P. S

Jika Anda ingin menguasai keamanan PHP, Anda dapat mendaftar di kursus Keamanan PHP profesional saya

 

1. Pastikan Keamanan Kata Sandi

Kelas ini menggunakan password_hash() dan password_verify() untuk menyimpan hash kata sandi pada database dan mencocokkannya dengan kata sandi teks biasa yang disediakan oleh klien

Fungsi-fungsi ini menggunakan algoritme hashing yang kuat dengan garam acak semu

Jika Anda perlu mengubah cara penyimpanan data akun di database Anda, pastikan untuk tetap menggunakan fungsi tersebut. Bagaimanapun juga, jangan pernah menyimpan kata sandi dalam teks biasa dan jangan pernah menggunakan algoritme hashing yang lemah (seperti MD5 ).

 

Jika Anda ingin mempelajari lebih lanjut tentang keamanan kata sandi, buka tutorial PHP Password Hashing saya

 

2. Pastikan Keamanan Database

Serangan SQL Injection adalah salah satu serangan yang paling umum digunakan terhadap aplikasi web

Dalam tutorial ini, Anda menggunakan ekstensi PDO untuk operasi database. Setiap string yang berpotensi tidak aman dikirim ke database menggunakan pernyataan yang disiapkan

Jika Anda tidak terbiasa dengan PDO, Anda dapat menggunakan ekstensi MySQLi. MySQLi mendukung pernyataan yang disiapkan (lebih disukai) atau melarikan diri

Bagaimanapun, saya sarankan Anda membaca panduan saya tentang pencegahan SQL Injection untuk memastikan Anda tahu apa yang harus dilakukan untuk menghindari serangan semacam itu.

Jika Anda memerlukan penjelasan dan contoh yang jelas tentang cara menggunakan PDO dan MySQLi, Anda dapat menemukan semua yang Anda butuhkan di PHP saya dengan Panduan Lengkap MySQL

 

l

3. Lakukan Validasi Input

Validasi input adalah landasan lain dari keamanan web

Di kelas ini, beberapa validasi dasar pada nilai nama pengguna, kata sandi, dan ID akun dilakukan dengan tiga metode ini

  • isNameValid()
  • isPasswdValid()
  • dan isIdValid()

Saya mendorong Anda untuk mengedit fungsi-fungsi ini dan membuatnya seketat mungkin

Misalnya, jika Anda memutuskan bahwa nama pengguna hanya boleh berisi kumpulan karakter tertentu, langkah validasi yang baik adalah memeriksa setiap karakter dengan daftar putih, seperti ini

 

<?php
require './db_inc.php';
require './account_class.php';
7

4. Pastikan Keamanan Sesi

ID Sesi, yang digunakan untuk login berbasis sesi, dikirim di dalam cookie HTTP

Oleh karena itu, hal terpenting yang harus dilakukan untuk membuatnya aman adalah dengan mengaktifkan HTTPS

Dengan HTTPS di tempat, serangan Sesi seperti mengendus data menjadi lebih sulit

 

Namun, Sesi memiliki kelemahan keamanan potensial lainnya (seperti kerentanan Fiksasi Sesi) yang perlu dikurangi dengan konfigurasi yang benar

Nilai konfigurasi PHP terpenting yang harus Anda periksa adalah ,  dan

Anda dapat menemukannya di dalam php Anda. file ini

  • sidang. use_strict_mode=1
  • sidang. use_only_cookies=1
  • sidang. cookie_secure=1

Pastikan untuk membiarkannya diaktifkan. Namun, Anda mungkin perlu menonaktifkannya saat bekerja di lingkungan pengembangan lokal Anda

Daftar lengkap opsi konfigurasi terkait keamanan Sesi ada di sini

 

Langkah 7 . pertanyaan

Dalam bab terakhir ini Anda akan menemukan jawaban atas beberapa pertanyaan yang paling banyak diajukan tentang autentikasi PHP

Jika Anda memiliki pertanyaan lain, tinggalkan komentar di bawah ini

Sesi login php dengan database

Pertanyaan 1

Bagaimana Anda mengenkripsi kata sandi menggunakan PHP?

 

PHP menyediakan cara mudah untuk membuat hash kata sandi yang aman dan mencocokkannya dengan kata sandi teks biasa

Bahkan, Anda dapat membuat hash kata sandi dengan fungsi password_hash(), dan mencocokkan hash yang ada dengan kata sandi teks biasa dengan password_verify()

password_hash() menangani penggunaan algoritme hashing yang cukup kuat dan menambahkan garam pseudo-random ke hash

 

Pertanyaan #2

Bagaimana Anda menambahkan garam kata sandi menggunakan PHP?

 

Salt adalah string pseudo-random yang digunakan saat mengenkripsi atau hashing string (seperti kata sandi)

Garam digunakan untuk meningkatkan perlindungan terhadap beberapa jenis serangan, seperti serangan berbasis kamus

Algoritme yang berbeda menggunakan garam dengan cara yang berbeda, tetapi jika Anda hanya ingin menggunakan garam untuk keamanan kata sandi, Anda dapat mengandalkan fungsi password_hash() (lihat pertanyaan sebelumnya)

Faktanya, fungsi ini secara otomatis menambahkan garam pseudo-random ke hash untuk Anda

 

Pertanyaan #3

Apakah variabel Sesi PHP aman?

 

Data sesi disimpan di server tempat PHP berjalan (kecuali penyimpanan Sesi yang berbeda digunakan). Oleh karena itu, data Sesi seaman server

Variabel sesi tidak dikirim melalui jaringan. Hanya ID Sesi

Jika dikonfigurasi dengan benar (lihat bab sebelumnya tentang Keamanan Masuk), Sesi cukup aman untuk sebagian besar penggunaan

Namun, dalam aplikasi yang kritis terhadap keamanan, sebaiknya atur batas waktu Sesi ke nilai yang sangat rendah (lihat parameter)

 

Pertanyaan #4

Bisakah Sesi PHP diretas?

 

Pembajakan sesi, atau peretasan, secara teori dimungkinkan

Ada dua jenis serangan utama

  • Fiksasi Sesi, dan
  • Pembajakan Sesi

 

Serangan fiksasi dapat dicegah dengan mengaktifkan Sessions Strict Mode di konfigurasi PHP Anda (lihat bab Keamanan Login untuk detailnya)

Serangan Pembajakan Sesi adalah kumpulan teknik yang berbeda untuk mencuri atau memprediksi ID Sesi, yang kemudian dapat digunakan oleh penyerang untuk menyamar sebagai korban.

Serangan tersebut termasuk mengendus lalu lintas, serangan XSS dan serangan MITM (main-in-the-middle).

Menggunakan HTTPS mengurangi atau menyelesaikan sebagian besar masalah tersebut

 

Kesimpulan

N

Dengan tutorial ini Anda mempelajari cara kerja sistem login dan autentikasi PHP yang lengkap

Anda melihat cara melakukan login nama pengguna/kata sandi serta login berbasis Sesi

Anda juga mempelajari cara menambahkan, mengedit, dan menghapus akun dari database, cara memastikan sistem Anda aman, dan banyak lagi

Bagaimana cara menghubungkan halaman login dengan database di php?

Daftar Isi .
Langkah 1- Buat Formulir Login PHP HTML
Langkah 2. Buat Kode CSS untuk Desain Situs Web
Langkah 3. Membuat Tabel Database Menggunakan MySQL
Langkah 4. Buka Koneksi ke Database MySQL
Langkah 5 - Buat Sesi Logout

Bagaimana cara membuat halaman login di php dan MySQL dengan sesi?

Buat kode PHP untuk login menggunakan session .
Pertama-tama, mulailah sesi di awal halaman
Kami menyertakan file konfigurasi. .
Gunakan kondisi if untuk menyetel data bidang formulir pada tombol
Di sini, kami menggunakan variabel permintaan. .
Gunakan kueri pemilihan MYSQL
Menyimpan data variabel sesi
Gunakan fungsi header()

Bagaimana cara menggunakan sesi dalam formulir login php?

php // Membuat Koneksi dengan Server dengan meneruskan nama_server, id_pengguna dan sandi sebagai parameter $koneksi = mysql_connect("localhost", " .

Bagaimana cara mengambil data dari database menggunakan sesi di php?

php session_start(); . php"; $email = $_SESSION['email']; $query = "PILIH uid DARI master WHERE emailid = '". $email. "'";