Переход на случайную страницу PHP - PullRequest
0 голосов
/ 31 января 2009

У меня есть ссылка на 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 ]

2 голосов
/ 31 января 2009

Полагаю, веб-браузер кэширует перенаправление Location. Попробуйте добавить несколько заголовков «очистки кэша» вверху страницы

<?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 голосов
/ 31 января 2009

Ваш браузер или сервер, вероятно, кэшируют страницу. Попробуйте это в своем php-коде:

header("cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0");
1 голос
/ 31 января 2009

Как уже отмечали другие, похоже, что браузер кэширует перенаправление; Существуют различные типы перенаправления HTTP, и в зависимости от кода состояния браузер может или не может кэшировать перенаправление.

Вы можете попробовать изменить код ответа для выдачи 303 See Other, который является типом перенаправления, которое пользовательские агенты не должны кэшировать. Например:

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

Дополнительную информацию о кодах перенаправления HTTP смотрите в спецификации HTTP 1.1 ; в частности, раздел 10.3, который касается перенаправления.

1 голос
/ 31 января 2009

если вы уверены, что microtime () поддерживается в вашей ОС, в противном случае вы выполняете повторное заполнение с тем же значением .. "Эта функция доступна только в операционных системах, которые поддерживают системный вызов gettimeofday ()"

0 голосов
/ 31 января 2009

Если кэширование становится для вас слишком большой проблемой, и вы не можете достичь этого с помощью php, вы можете написать небольшой javascript, чтобы сделать то же самое, и быть уверенным, что вы будете получать случайную ссылку каждый раз.


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

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

0 голосов
/ 31 января 2009

Интересно, можно ли это сделать с вашим браузером, кэширующим перенаправление.

0 голосов
/ 31 января 2009

Вы пробовали это без звонка на srand()? Документы PHP для srand говорят:

Примечание : Начиная с PHP 4.2.0, нет необходимости заполнять генератор случайных чисел srand () или mt_srand (), поскольку теперь это делается автоматически.

0 голосов
/ 31 января 2009

Хм ... твой код работает, братан; возможно, вы неправильно поняли концепцию и думаете, что перезагрузка страницы, на которую вы пришли, должна привести вас к другому случайно сгенерированному URL ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...