转到随机页面PHP

时间:2009-01-31 04:44:03

标签: php random

我的链接转到http://example.com/random.php,代码为random.php。

<?php
srand ((double) microtime( )*1000000);
$random_number = rand(1,100);
header( "Location: http://example.com/test?page=$random_number" ) ;
?>

基本上我想要它做的是链接到一个随机页面。它最初工作,但在第一次点击后,它每次都会保持链接回相同的随机页面。知道如何解决这个问题吗?或者更好的方法来完全解决问题?

8 个答案:

答案 0 :(得分:2)

您的浏览器或服务器可能正在缓存该页面。在你的PHP代码中尝试这个:

header("cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0");

答案 1 :(得分:2)

我的猜测是网页浏览器会缓存位置重定向。尝试在页面顶部添加一些“缓存清除”标题

<?php
    //from http://php.net/header
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

    srand ((double) microtime( )*1000000);
    $random_number = rand(1,100);
    header( "Location: http://example.com/test?page=$random_number" ) ;
?>

免责声明:如果您将其用于恶意目的,特此诅咒就在您身上,您将在短时间内被格斗吃掉。

答案 2 :(得分:1)

你确定你的操作系统支持microtime(),否则你将重新播种相同的值.. "This function is only available on operating systems that support the gettimeofday() system call"

答案 3 :(得分:1)

正如其他人所指出的,听起来好像浏览器正在缓存重定向;有各种类型的HTTP重定向,根据状态代码,可能允许或不允许浏览器缓存重定向。

您可以尝试更改响应代码以发出303 See Other,这是一种用户代理不应缓存的重定向。例如:

header( 'Location: http://www.example.com', true /* overwrite */, 303 );

有关HTTP重定向代码的详细信息,请查看HTTP 1.1 specification;特别是第10.3节,它涉及重定向。

答案 4 :(得分:0)

您是否在没有拨打srand()的情况下尝试了此操作? PHP docs for srand说:

  

注意:从PHP 4.2.0开始,无需使用 srand()或mt_srand()为随机数生成器播种,因为现在自动完成

答案 5 :(得分:0)

我想知道是否可以使用浏览器缓存重定向。

答案 6 :(得分:0)

如果缓存对您来说变得太麻烦而且您无法通过php实现,那么您可以编写一个小的javascript来做同样的事情并确保每次都会得到一个随机链接。


function jump() {
var random = Math.floor(Math.random()*1000);

window.location="test?page="+random;
}

答案 7 :(得分:-2)

嗯......你的代码有效,兄弟;也许你误解了这个概念,并认为重新加载你到达的页面应该带你到另一个随机生成的URL ......