php实现浏览记录
PHP 实现浏览记录的方法
使用 Cookie 存储浏览记录
通过 Cookie 存储用户的浏览记录是一种简单的方法。每次用户访问页面时,将页面信息存入 Cookie,并限制存储数量。
// 设置浏览记录
$history = isset($_COOKIE['history']) ? json_decode($_COOKIE['history'], true) : [];
$currentPage = ['title' => '当前页面标题', 'url' => '当前页面URL'];
// 限制记录数量(例如最近 5 条)
array_unshift($history, $currentPage);
$history = array_slice($history, 0, 5);
// 存储到 Cookie
setcookie('history', json_encode($history), time() + 86400 * 30, '/');
使用 Session 存储浏览记录
Session 适合临时存储用户的浏览记录,数据在用户关闭浏览器后失效。

session_start();
// 初始化浏览记录
if (!isset($_SESSION['history'])) {
$_SESSION['history'] = [];
}
$currentPage = ['title' => '当前页面标题', 'url' => '当前页面URL'];
// 限制记录数量
array_unshift($_SESSION['history'], $currentPage);
$_SESSION['history'] = array_slice($_SESSION['history'], 0, 5);
使用数据库存储浏览记录
对于需要长期保存或跨设备同步的浏览记录,可以使用数据库存储。

// 假设已连接数据库
$userId = 1; // 用户ID
$title = '当前页面标题';
$url = '当前页面URL';
// 插入记录
$stmt = $pdo->prepare("INSERT INTO browsing_history (user_id, title, url, visited_at) VALUES (?, ?, ?, NOW())");
$stmt->execute([$userId, $title, $url]);
// 查询最近的浏览记录
$stmt = $pdo->prepare("SELECT title, url FROM browsing_history WHERE user_id = ? ORDER BY visited_at DESC LIMIT 5");
$stmt->execute([$userId]);
$history = $stmt->fetchAll(PDO::FETCH_ASSOC);
结合前端和后端实现
可以通过 Ajax 将浏览记录发送到后端存储,同时在前端展示。
// 后端接收 Ajax 请求
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['title'], $_POST['url'])) {
session_start();
$currentPage = ['title' => $_POST['title'], 'url' => $_POST['url']];
array_unshift($_SESSION['history'], $currentPage);
$_SESSION['history'] = array_slice($_SESSION['history'], 0, 5);
echo json_encode(['status' => 'success']);
exit;
}
// 前端发送浏览记录
$.post('save_history.php', {
title: document.title,
url: window.location.href
}, function(response) {
console.log('浏览记录已保存');
});
清理过期的浏览记录
对于数据库存储的浏览记录,可以定期清理过期数据。
// 删除 30 天前的记录
$stmt = $pdo->prepare("DELETE FROM browsing_history WHERE visited_at < DATE_SUB(NOW(), INTERVAL 30 DAY)");
$stmt->execute();
以上方法可以根据实际需求选择或组合使用,以实现灵活高效的浏览记录功能。






