2009-01-31 2 views
0

У меня есть ссылка, что подходит для http://example.com/random.php, код для random.php, для просмотра картинки.Перейти к случайной странице PHP

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

В основном, что я хочу, это ссылка на случайную страницу. Сначала он работает, но после первого щелчка он все время связывается с одной и той же предположительно случайной страницей. Любая идея, как это исправить? или, может быть, лучший способ полностью подойти к проблеме?

ответ

-2

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

0

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

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

0

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

2

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

header("cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0"); 
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") ; 
?> 

ОТКАЗ: Если вы используете это для гнусных целей, выродок проклятие Настоящим помещается на вас, и вы будете съедены грубый в коротком порядке.

+0

Я не могу придумать какую-либо гнусную цель использовать случайные страницы. Можете ли вы подробно рассказать? – Spikolynn

+0

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

+0

Просто копировал исходный код плаката. –

0

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

 

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

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

1

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

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

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

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