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

如何实现每次点击链接时,新旧用户均跳转至不同页面?

解决方案:实现全局轮询跳转

原代码依赖session存储跳转索引,仅能在单个用户会话内轮询链接。要实现所有用户(无论新老)每次点击都按顺序跳转不同页面,需要改用全局共享的存储方式记录当前跳转位置,文件、数据库或缓存服务都是可行选项。下面提供基于文件存储的最简实现方案:

修改后的代码

<?php
$links = [
    'https://www.javatpoint.com/array-in-java',
    'https://seomagnifier.com/backlinks-maker'
];
$counterFile = 'link_counter.txt';

// 初始化计数器文件(不存在则创建)
if (!file_exists($counterFile)) {
    file_put_contents($counterFile, '0');
}

// 加锁避免并发冲突
$fileHandle = fopen($counterFile, 'r+');
flock($fileHandle, LOCK_EX);

// 读取当前计数器值
$currentLink = (int)fread($fileHandle, filesize($counterFile));

// 计数器超出链接总数时重置
if ($currentLink >= count($links)) {
    $currentLink = 0;
}

// 获取目标跳转链接
$targetLink = $links[$currentLink];

// 更新计数器
$currentLink++;
fseek($fileHandle, 0);
fwrite($fileHandle, (string)$currentLink);
ftruncate($fileHandle, ftell($fileHandle));

// 释放锁并关闭文件
flock($fileHandle, LOCK_UN);
fclose($fileHandle);

// 执行跳转
header("Location: $targetLink");
exit;
?>

核心逻辑说明

  • 替换session为全局文件计数器:所有用户共享同一计数器文件,确保每次点击都按全局顺序轮询链接。
  • 文件锁机制:用flock添加排他锁,避免多用户同时操作计数器时出现数值错乱,这是高并发场景下的必要处理。
  • 自动初始化:计数器文件不存在时会自动创建并初始化为0,无需手动配置。

可选优化方案

如果服务器支持更高性能的存储服务,也可以替换为以下方案:

  • Redis:使用INCR原子命令更新计数器,性能优于文件存储,适合高并发场景。
  • 数据库:创建单表存储计数器值,通过事务或原子更新语句保证计数准确性。

内容的提问来源于stack exchange,提问作者Sahil Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:02:26