【问题标题】:Going to a Random page PHP转到随机页面 PHP
【发布时间】:2010-10-04 15:20:31
【问题描述】:

我有一个指向 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" ) ;
?>

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

【问题讨论】:

    标签: php random


    【解决方案1】:

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

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

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

    有关 HTTP 重定向代码的更多信息,请查看HTTP 1.1 specification;特别是第 10.3 节,它处理重定向。

    【讨论】:

      【解决方案2】:

      如果缓存对你来说是个大问题,而你无法通过 php 实现,你可以编写一个小的 javascript 来做同样的事情,并确保你每次都会得到一个随机链接。

      函数跳转(){ var random = Math.floor(Math.random()*1000); window.location="test?page="+random; }

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我猜网络浏览器会缓存位置重定向。尝试在页面顶部添加一些“缓存破坏”标题

          <?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" ) ;
          ?>
          

          免责声明:如果您将其用于邪恶目的,特此将受到极客诅咒,您将在短期内被格鲁埃吃掉。

          【讨论】:

          • 我想不出任何恶意的目的来使用随机页面。能详细点吗?
          • 来自 PHP 手册:“注意:从 PHP 4.2.0 开始,不需要使用 srand() 或 mt_srand() 为随机数生成器播种,因为现在这是自动完成的。”跨度>
          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            我想知道这是否与您的浏览器缓存重定向有关。

            【讨论】:

              【解决方案7】:

              您是否尝试过不调用srand()PHP docs for srand 说:

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-04-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-11-02
                  • 1970-01-01
                  • 2012-12-16
                  相关资源
                  最近更新 更多