You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP获取页面加载与离开时的UNIX时间戳并保存到文本文件

如何记录用户进入和离开页面的时间戳

首先得明确一点:纯PHP没法直接捕获用户“离开页面”的事件,因为PHP是服务器端脚本,只有当用户向服务器发送请求时才会执行。而用户离开页面(比如关闭标签、跳转到其他页)是客户端行为,所以我们需要前端JavaScript配合后端PHP来实现这个需求。

下面是一套可行的实现方案,兼顾可靠性和易用性:

1. 改进进入时间的记录逻辑

你之前的代码用fopen("w")会覆盖整个文件,这显然不是我们想要的——我们需要追加记录,而不是每次清空。另外,最好给每个页面加上标识,方便区分不同页面的访问记录。

创建一个track_entry.php脚本,用来处理页面进入的记录:

<?php
session_start();

// 获取当前要访问的页面标识(从URL参数传入)
$page_id = $_GET['page'] ?? 'unknown_page';
$entry_timestamp = time();

// 把进入时间追加到日志文件(用LOCK_EX避免并发写入问题)
$log_content = sprintf("ENTRY|%s|%d|%s\n", $page_id, $entry_timestamp, $_SERVER['REMOTE_ADDR']);
file_put_contents('temp/access_log.txt', $log_content, FILE_APPEND | LOCK_EX);

// 把当前页面的进入时间存入Session,方便后续关联离开时间
$_SESSION["entry_{$page_id}"] = $entry_timestamp;

// 跳转到目标HTML页面
header("Location: {$page_id}.html");
exit;
?>

之后,用户访问页面时,不要直接打开main1.html,而是通过track_entry.php?page=main1跳转,这样就能记录进入时间。

2. 用JavaScript捕获页面离开事件并记录时间

用户离开页面时,我们可以用浏览器的beforeunload事件触发一个请求,把离开时间发送给PHP脚本。这里推荐用navigator.sendBeacon,它比普通AJAX更可靠——浏览器会确保请求完成,不会因为页面卸载而中断。

在每个HTML页面(比如main1.html)的末尾加入这段JS代码:

<script>
window.addEventListener('beforeunload', function() {
    const pageId = 'main1'; // 对应页面标识
    const exitTimestamp = Math.floor(Date.now() / 1000); // 转换为UNIX时间戳

    // 用sendBeacon发送数据到记录脚本
    navigator.sendBeacon('track_exit.php', new URLSearchParams({
        page: pageId,
        exit_time: exitTimestamp
    }));
});
</script>

3. 处理离开时间的PHP脚本

创建track_exit.php,用来接收前端发送的离开时间并写入日志:

<?php
session_start();

$page_id = $_POST['page'] ?? 'unknown_page';
$exit_timestamp = $_POST['exit_time'] ?? time();
$entry_timestamp = $_SESSION["entry_{$page_id}"] ?? 'unknown';

// 记录离开时间,同时关联进入时间(如果有的话)
$log_content = sprintf("EXIT|%s|%d|%s|%d\n", $page_id, $exit_timestamp, $_SERVER['REMOTE_ADDR'], $entry_timestamp);
file_put_contents('temp/access_log.txt', $log_content, FILE_APPEND | LOCK_EX);

// 不需要返回任何内容,sendBeacon不关心响应
exit;
?>

一些注意事项

  • 确保temp目录有写入权限,否则PHP无法创建/写入日志文件。
  • beforeunload事件在用户关闭标签、刷新页面、跳转到其他链接时都会触发,但如果浏览器崩溃或强制关闭,可能无法触发,这种极端情况目前没有完美的解决方案。
  • 如果需要区分不同用户,可以结合Session ID或用户标识,把它也写入日志,方便后续分析。

内容的提问来源于stack exchange,提问作者Rulli Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:26:51