Хм, если в базовом имени пути & dirname просто не собираются сокращать его и идут, путь тверд (что, если родитель не экспортировал ПУТЬ!). Однако оболочка должна иметь открытый дескриптор к своему сценарию, и в ударе дескриптор является работами № 255.
SELF=`readlink /proc/$/fd/255`
для меня.
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.
}
Зачем вам это нужно?
Но нет, нет никакого способа, который будет работать постоянно, чтобы остановить это.
Мне кажется, что нет хорошего технического решения этой проблемы (другие ответы довольно хорошо покрывали это). Если пользователи постоянно обновляют эту страницу, я предполагаю, что это потому, что они ожидают, что страница изменится, и им нужна информация с точностью до секунды. Возможно, вам стоит убрать их причину, по которой они хотят обновить страницу. Самый простой способ сделать это, вероятно, - обновить саму страницу (вероятно, через AJAX). Таким образом, пользователь может сидеть там, и обновления будут просто катиться - больше не нужно нажимать клавишу F5, что сократит вашу пропускную способность, не говоря уже о том, что пользовательский интерфейс будет лучше.
Он не отвечает на ваш вопрос напрямую, но вы, вероятно, сможете решить свою проблему с кешированием, не так ли?
Если вы отправите заголовок Cache-Control: общедоступный, max-age = 120 Это должно проинструктировать браузер, что ему не нужно повторно запрашивать страницу в течение 2 минут, и он может просто использовать копию из своего кеша. Если, конечно, они могут использовать Ctrl-f5 для принудительного обновления, но это должно сильно помочь?
Возможно, вам следует сосредоточить свои усилия на сокращении полосы пропускания, которую использует ваша страница. Изучите области сжатия изображений, оптимизации страниц и кэширования.
Понятия не имею, сработает ли это, но не могли бы вы прослушивать нажатия клавиш с помощью javascript, а при нажатии клавиши F5 делайте то, что хотите.
В вашем 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,
Думаю, вы могли бы сделать это:
session_start();
if (isset($_SESSION['visited'])) {
header("Location: http://the.page/you/want");
} else {
$_SESSION['visited'] = true;
}
Сам сайт делает это с помощью Javascript, поэтому, когда вы что-то редактируете, вы не потеряете это, обновив, вернувшись и т. Д. событие, определенное JQuery, которое позволяет вам это сделать, поэтому изучите его и в этом событии перенаправьте на нужную страницу (вероятно, она должна находиться в том же домене).
Чтобы остановить обновление F5, вы должны запретить обновление любого типа. В качестве взлома вы можете попробовать поместить метку времени в строку запроса. При загрузке вы можете проверить значение отметки времени и, если она в прошлом, перенаправить на другую страницу. Это будет работать, если файлы cookie отключены.