Мешайте людям обновить страницу

Хм, если в базовом имени пути & dirname просто не собираются сокращать его и идут, путь тверд (что, если родитель не экспортировал ПУТЬ!). Однако оболочка должна иметь открытый дескриптор к своему сценарию, и в ударе дескриптор является работами № 255.

SELF=`readlink /proc/$/fd/255`

для меня.

5
задан yaar zeigerman 5 August 2009 в 18:15
поделиться

10 ответов

session_start();
if($_SESSION['hasbeenhere'] == 1)
{
 // Page refreshed
}
else
{
   $_SESSION['hasbeenhere'] = 1;
}

Если у человека не включены файлы cookie, это не сработает. Если кто-то перейдет на другую страницу и вернется, она будет отображаться как обновленная.

В целом, вы не можете сделать это безошибочно, но это 1 способ предотвратить просмотр одной и той же страницы дважды.

Из-за вашего комментария, если вы хотите, чтобы люди не нажимали F5 200 раз попробуйте следующее.

$page = $_SERVER['REQUEST_URI'];
// Defaults
if(!isset($_SESSION[$page]['count']))
{
    $_SESSION[$page]['count'] = 1;
    $_SESSION[$page]['first_hit'] = time();
    $_SESSION[$page]['banned'] = false;
}
else
{
    $_SESSION[$page]['count']++; // Increase the counter
}

// If person is banned, end script
if($_SESSION[$page]['banned'] == true)
{
    die();
}

if($_SESSION[$page]['first_hit'] < time() - 30)
{
    $_SESSION[$page]['count'] = 1; // Reset every 30 seconds
}

if($_SESSION[$page]['count'] > 100)
{
    $_SESSION[$page]['banned'] = true; 
    // Ban if they hit over 100 times in 30 seconds.
}
8
ответ дан 18 December 2019 в 06:03
поделиться

Зачем вам это нужно?

Но нет, нет никакого способа, который будет работать постоянно, чтобы остановить это.

3
ответ дан 18 December 2019 в 06:03
поделиться

Мне кажется, что нет хорошего технического решения этой проблемы (другие ответы довольно хорошо покрывали это). Если пользователи постоянно обновляют эту страницу, я предполагаю, что это потому, что они ожидают, что страница изменится, и им нужна информация с точностью до секунды. Возможно, вам стоит убрать их причину, по которой они хотят обновить страницу. Самый простой способ сделать это, вероятно, - обновить саму страницу (вероятно, через AJAX). Таким образом, пользователь может сидеть там, и обновления будут просто катиться - больше не нужно нажимать клавишу F5, что сократит вашу пропускную способность, не говоря уже о том, что пользовательский интерфейс будет лучше.

0
ответ дан 18 December 2019 в 06:03
поделиться

Он не отвечает на ваш вопрос напрямую, но вы, вероятно, сможете решить свою проблему с кешированием, не так ли?

Если вы отправите заголовок Cache-Control: общедоступный, max-age = 120 Это должно проинструктировать браузер, что ему не нужно повторно запрашивать страницу в течение 2 минут, и он может просто использовать копию из своего кеша. Если, конечно, они могут использовать Ctrl-f5 для принудительного обновления, но это должно сильно помочь?

0
ответ дан 18 December 2019 в 06:03
поделиться

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

12
ответ дан 18 December 2019 в 06:03
поделиться

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

1
ответ дан 18 December 2019 в 06:03
поделиться

В вашем PHP-коде сделайте следующее:

 if(isset($_SESSION["pagename-LAST_VIEWED"])) {
    v = $_SESSION["pagename-LAST_VIEWED"])
    if(time() - v < 15) {
       // user is refreshing more than once per 15 seconds
       // send them something else and die
       }
 }
 $_SESSION["pagename-LAST_VIEWED"] = time();

Пожалуйста, не обращайте внимания на мой грязный псевдо-PHP, это не мой повседневный язык.

Это будет предотвратить обновление страницы (F5) и , если пользователь просто щелкнет закладку еще раз или снова нажмет Enter в адресной строке.

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

Еще одна вещь, которую следует учитывать: основная проблема - это ваш другой код, а не ваши пользователи. Подумайте о том, чтобы переписать свою страницу, чтобы она автоматически обновляла ту часть, которую они хотят видеть, через AJAX с заданной задержкой. Это даст им стимул не использовать Refresh,

3
ответ дан 18 December 2019 в 06:03
поделиться

Думаю, вы могли бы сделать это:

session_start();

if (isset($_SESSION['visited'])) {
    header("Location: http://the.page/you/want");
} else {
    $_SESSION['visited'] = true;
}
0
ответ дан 18 December 2019 в 06:03
поделиться

Сам сайт делает это с помощью Javascript, поэтому, когда вы что-то редактируете, вы не потеряете это, обновив, вернувшись и т. Д. событие, определенное JQuery, которое позволяет вам это сделать, поэтому изучите его и в этом событии перенаправьте на нужную страницу (вероятно, она должна находиться в том же домене).

0
ответ дан 18 December 2019 в 06:03
поделиться

Чтобы остановить обновление F5, вы должны запретить обновление любого типа. В качестве взлома вы можете попробовать поместить метку времени в строку запроса. При загрузке вы можете проверить значение отметки времени и, если она в прошлом, перенаправить на другую страницу. Это будет работать, если файлы cookie отключены.

0
ответ дан 18 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: