Как увеличить счетчик каждой загрузки страницы (в PHP)?

Я хочу, чтобы определенное действие происходило, когда пользователь посещал X страниц сайта

Должен ли я хранить счетчик извне (в текстовом файле или БД)?

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


person meleyal    schedule 14.05.2009    source источник
comment
Вы можете сделать то же самое, используя суперглобальный $_COOKIES, но я бы рекомендовал $_SESSION для точности и надежности. us3.php.net/manual/en/reserved.variables.cookies. php   -  person TJ L    schedule 15.05.2009


Ответы (6)


Было бы довольно просто просто использовать данные $_SESSION для хранения того, сколько страниц просмотрено пользователем.

$_SESSION['pageviews'] = ($_SESSION['pageviews']) ? $_SESSION['pageviews'] + 1 : 1;
person TJ L    schedule 14.05.2009
comment
htxt: убедитесь, что вы вызываете session_start(), прежде чем пытаться использовать $_SESSION - person Frank Farmer; 14.05.2009
comment
htxt: session_start() должен вызываться до вывода каких-либо данных. Данные могут быть заголовком, отправленным с сервера, некоторым эхом или печатью в вашем коде. - person Luc M; 15.05.2009
comment
Не могли бы вы сделать что-то подобное с файлами cookie? Я использую Wordpress, который, кажется, ест мои переменные сеанса - person meleyal; 15.05.2009

Самый простой способ — использовать хранилище сеансов PHP.

session_start();
@$_SESSION['pagecount']++;

PHP автоматически отправляет пользователю файл cookie сеанса и прозрачно сохраняет содержимое $_SESSION в плоском файле, связанном с этим файлом cookie. Вам действительно не нужно сворачивать свое собственное решение для этой проблемы.

person Frank Farmer    schedule 14.05.2009

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

<input type="hidden" value="2" id="blabla" />
person Arve Systad    schedule 14.05.2009
comment
Ваш второй метод работает только в том случае, если каждый щелчок является POST, и прерывается, если пользователь перезагружает страницу, открывает несколько страниц на отдельных вкладках, нажимает кнопку «Назад» и т. д. - person Frank Farmer; 14.05.2009

Короткий ответ: да, вам нужно сохранить это извне, потому что php (по умолчанию) имеет политику сохранения нулевой памяти. В основном это означает, что после запуска вашего php-скрипта в памяти ничего не остается.

Для сайта с низким трафиком вы можете подумать о простом текстовом файле, в котором вы читаете, увеличиваете и записываете. Для сайта с более высоким трафиком может подойти очень простая таблица mysql.

person Travis    schedule 14.05.2009

У вас уже есть способ определить, кем является пользователь (например, по имени пользователя и паролю), даже если он покинет сайт и вернется в другой день? Или вам просто интересно отслеживать количество страниц, которые видит посетитель, и делать что-то особенное на x-й просмотренной странице.

Если это второе, у вас уже есть переменная сеанса, в которой вы можете хранить счетчик.

$_SESSION['views'] = $_SESSION['views'] + 1
if($_SESSION['views'] == x) ...
person David    schedule 14.05.2009

вы должны использовать оператор if, чтобы проверить, установлен ли он уже;

if( isset($count) )
{
   $count = $count + 1;
}
else
{
   $count = 1;
}

Вы также можете использовать метод get, чтобы поместить счетчик в URL-адрес, чтобы вам не приходилось записывать счетчик в файл или базу данных.

person Josh Curren    schedule 14.05.2009
comment
Ввод счетчика в URL-адрес не работает, если пользователь нажимает кнопку «Назад» или открывает несколько вкладок, и вызывает проблемы с дублированием контента для целей поисковой системы. - person Frank Farmer; 14.05.2009
comment
Истинный. Я не думал об этом. - person Josh Curren; 14.05.2009