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

企业考勤系统:基于用户权限实现PHP独立页面缓存方案求助

解决方案:为不同用户生成独立缓存页面

你的核心问题是当前缓存文件名仅基于PHP脚本名称,没有区分访问用户,导致所有用户共用同一个缓存文件。要解决这个问题,只需在缓存文件名中加入用户的唯一标识(如用户ID),确保每个用户的缓存文件独立。

修改步骤:

  1. 获取登录用户的唯一标识:通过Session获取当前登录用户的ID(假设你的系统已通过Session管理登录状态,用户ID存储在$_SESSION['user_id']中)。
  2. 修改缓存文件名规则:将用户ID追加到缓存文件名中,让每个用户的缓存文件独一无二。

修改后的top-cache.php代码:

<?php
// 启动Session,获取当前登录用户ID
session_start();
// 验证用户是否已登录(根据你的实际登录逻辑调整)
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}
$user_id = $_SESSION['user_id'];

$url = $_SERVER["SCRIPT_NAME"];
$break = explode('/', $url);
$file = $break[count($break) - 1];
// 缓存文件名加入用户ID,确保每个用户的缓存独立
$cachefile = 'cached-'.substr_replace($file ,"",-4).'-user-'.$user_id.'.html';
$cachetime = 18000;

// 检查缓存是否有效,有效则直接输出缓存内容
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
    echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->\n";
    readfile($cachefile);
    exit;
}
ob_start(); // 启动输出缓冲
?>

bottom-cache.php无需修改:

原代码可以直接使用,因为$cachefile变量已在top-cache.php中定义,include后会共享该变量。

使用说明:

保持原有的使用方式不变,但需确保你的业务逻辑已完成用户登录验证,并将用户ID存入$_SESSION['user_id']:

<?php
include('top-cache.php'); 
// 业务逻辑代码(总经理查看所有记录/普通员工查看自身记录)
include('bottom-cache.php');
?>

额外注意事项:

  • 如果用户权限发生变更(如普通员工晋升为总经理),可手动删除该用户的旧缓存文件,或等待缓存自然过期(当前设置为5小时)。
  • 若需在数据更新时立即失效缓存(如员工打卡后),可在业务逻辑中添加代码,删除对应用户的缓存文件:
    // 示例:员工打卡后,删除该员工的考勤页面缓存
    $user_cache_file = 'cached-attendance-user-'.$user_id.'.html';
    if (file_exists($user_cache_file)) {
        unlink($user_cache_file);
    }
    

内容的提问来源于stack exchange,提问作者M Emre Çunkuş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:35:05