Pernah login di perangkat lain dan lupa logout? Atau takut akun kamu masih aktif di HP yang pernah dipinjam teman? Fitur “Manajemen Perangkat Aktif” bisa jadi solusi. Dengan sistem ini, setiap login user akan direkam (device, IP, waktu, browser).
Pengguna bisa melihat semua sesi aktif dan klik “Logout” di perangkat tertentu untuk mencabut token login dari jarak jauh.
Struktur Database
Tambahkan tabel khusus untuk menyimpan sesi login user:
CREATE TABLE user_sessions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
device_name VARCHAR(100) DEFAULT NULL,
ip_address VARCHAR(50) DEFAULT NULL,
user_agent TEXT DEFAULT NULL,
token VARCHAR(64) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
last_activity DATETIME DEFAULT CURRENT_TIMESTAMP,
is_active TINYINT(1) DEFAULT 1,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
Simpan Data Perangkat Saat Login
Setiap kali user berhasil login (baik dengan password atau remember me), buat catatan di tabel user_sessions:
<?php
$user_id = $user['id'];
$token = bin2hex(random_bytes(32));
$device = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
$stmt = $conn->prepare("INSERT INTO user_sessions (user_id, device_name, ip_address, user_agent, token, last_activity)
VALUES (?, ?, ?, ?, ?, NOW())");
$stmt->bind_param("issss", $user_id, $_SERVER['HTTP_USER_AGENT'], $ip, $device, $token);
$stmt->execute();
// Simpan token ke cookie untuk remember me
setcookie('remember_token', $token, time() + (86400 * 30), '/', '', true, true);
?>
Kamu bisa deteksi nama perangkat dengan library seperti Mobile Detect untuk menampilkan info seperti “Chrome di Android” atau “Firefox di Windows”.
Halaman Manajemen Perangkat Aktif
Buat file devices.php untuk menampilkan semua sesi aktif user yang sedang login:
<?php
include 'config.php';
session_start();
$user_id = $_SESSION['user_id'];
$result = $conn->query("SELECT * FROM user_sessions WHERE user_id = $user_id ORDER BY last_activity DESC");
?>
<h3>Perangkat Aktif Anda</h3>
<table border="1" cellpadding="6" cellspacing="0">
<tr>
<th>Perangkat</th>
<th>IP</th>
<th>Terakhir Aktif</th>
<th>Status</th>
<th>Aksi</th>
</tr>
<?php while($row = $result->fetch_assoc()): ?>
<tr>
<td><?= htmlspecialchars($row['device_name']) ?></td>
<td><?= htmlspecialchars($row['ip_address']) ?></td>
<td><?= htmlspecialchars($row['last_activity']) ?></td>
<td><?= $row['is_active'] ? 'Aktif' : 'Nonaktif' ?></td>
<td>
<?php if ($row['is_active']): ?>
<form method="post" action="logout_device.php" style="display:inline;">
<input type="hidden" name="token" value="<?= $row['token'] ?>">
<button type="submit">Logout</button>
</form>
<?php else: ?>
<span>-</span>
<?php endif; ?>
</td>
</tr>
<?php endwhile; ?>
</table>
Logout Perangkat Tertentu
Buat file logout_device.php:
<?php
include 'config.php';
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$token = $_POST['token'];
$user_id = $_SESSION['user_id'];
$stmt = $conn->prepare("UPDATE user_sessions SET is_active = 0 WHERE user_id = ? AND token = ?");
$stmt->bind_param("is", $user_id, $token);
$stmt->execute();
echo "<p style='color:green'>Perangkat berhasil dilogout.</p>";
echo "<a href='devices.php'>Kembali ke daftar perangkat</a>";
}
?>
Sesi di perangkat yang dihapus otomatis tidak bisa login lagi karena token-nya sudah tidak aktif.
Perbarui Aktivitas Sesi Otomatis
Setiap kali user membuka halaman, update waktu aktivitas terakhir:
<?php
if (isset($_COOKIE['remember_token'])) {
$token = $_COOKIE['remember_token'];
$stmt = $conn->prepare("UPDATE user_sessions SET last_activity = NOW() WHERE token = ? AND is_active = 1");
$stmt->bind_param("s", $token);
$stmt->execute();
}
?>
Ini membantu menampilkan waktu terakhir aktif secara real-time di halaman devices.php.
Logout Semua Perangkat Sekaligus
Tambahkan tombol “Logout dari semua perangkat”:
<form method="post" action="logout_all.php">
<button type="submit" style="background:red;color:white;">Logout Semua Perangkat</button>
</form>
Lalu buat logout_all.php:
<?php
include 'config.php';
session_start();
$user_id = $_SESSION['user_id'];
$conn->query("UPDATE user_sessions SET is_active = 0 WHERE user_id = $user_id");
setcookie('remember_token', '', time() - 3600, '/');
session_destroy();
echo "<p style='color:green'>Semua perangkat berhasil logout.</p>";
?>
Menampilkan Informasi Tambahan (Opsional)
Agar tampak profesional, kamu bisa tampilkan:
-
Nama browser (Chrome, Firefox, Safari, dll)
-
Sistem operasi (Windows, Android, iOS)
-
Lokasi perkiraan (menggunakan IP geolocation API)
-
Waktu login pertama dan terakhir
Contoh menampilkan nama browser sederhana:
<?php
function detectBrowser($userAgent) {
if (strpos($userAgent, 'Chrome') !== false) return 'Google Chrome';
if (strpos($userAgent, 'Firefox') !== false) return 'Mozilla Firefox';
if (strpos($userAgent, 'Safari') !== false) return 'Apple Safari';
if (strpos($userAgent, 'Edge') !== false) return 'Microsoft Edge';
return 'Browser Tidak Dikenal';
}
?>
Keamanan Tambahan
-
Gunakan token acak unik setiap login (
bin2hex(random_bytes(32))). -
Simpan token di cookie dengan
HttpOnlydanSecure. -
Enkripsi user agent jika ingin menyembunyikan detail device.
-
Hapus sesi lama secara otomatis setelah beberapa hari tidak aktif.
Contoh auto-expire sesi lama:
<?php
$conn->query("UPDATE user_sessions SET is_active = 0 WHERE last_activity < NOW() - INTERVAL 7 DAY");
?>
Kesimpulan
Dengan fitur Manajemen Perangkat Aktif dan Logout Jarak Jauh, sistem login kamu menjadi lebih aman dan profesional — seperti layanan besar pada umumnya.
Pengguna bisa:
-
Melihat semua perangkat yang sedang login,
-
Logout dari satu perangkat tertentu,
-
Logout semua perangkat sekaligus,
-
Mengetahui aktivitas terakhir setiap sesi login.