PHP-сессия для отслеживания уникальных просмотров страниц

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

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

Это мой код:

$pagenumber = 1; //other stuff here... session_start(); if (!isset($_SESSION[$pagenumber])) { $storeview = mysqli_query($dbconnect, "UPDATE tblcount SET views=views+1 WHERE id='$pagenumber'"); $_SESSION[$pagenumber] = $pagenumber; } echo $_SESSION[$pagenumber]; $Recordset1 = mysqli_query($dbconnect, "SELECT views FROM tblcount WHERE id = '$pagenumber'"); $row_Recordset1 = mysqli_fetch_assoc($Recordset1); echo "Viewed ".$row_Recordset1['views']." times"; 

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

Я нашел аналогичный вопрос: PHP: уникальные посещения / обращения к определенным элементам с использованием файлов cookie / ip, но я столкнулся с аналогичной проблемой с предлагаемым там решением.

Помогите оценить!

1) Вы обновляете в tblCount КАЖДОЕ время, потому что ваш сеанс закрывается каждый раз, когда заканчивается ваш скрипт. SO: Поместите session_start () как FIRST LINE в код.

2) Невозможно установить целое число как переменную $ _SESSION. Поэтому, если вы установите $ _SESSION [$ pagenumber] = 'something', вы получите следующее уведомление:

 ( ! ) Notice: Unknown: Skipping numeric key 1 in Unknown on line 0 

Совершенно … непонятно.

Подробнее см. Этот ответ .

Решение. Добавьте свой $ pagenumber в индекс в массив (здесь «pagenumbers») и этот массив внутри $ _SESSION. Больше никаких уведомлений.

NB: Я использовал свои функции для тестирования. Они просто заменяют ваш код обработки db.

 session_start(); $pagenumber = 1; if (!isset($_SESSION['pagenumbers'])) { $_SESSION['pagenumbers'] = array(); } if (!isset($_SESSION['pagenumbers'][$pagenumber])) { updateViews($pagenumber); $_SESSION['pagenumbers'][$pagenumber] = $pagenumber; } echo 'Page number: ' . $_SESSION['pagenumbers'][$pagenumber] . '<br/>'; $views = getViews($pagenumber); echo '<pre>Viewed ' . print_r($views, true) . ' times</pre>'; 


РЕДАКТИРОВАТЬ:

Я добавил ссылку для получения подробной информации.

Просто проверено. Это также работает.

session_start ();

// Получить имя страницы
$ page_url = $ _SERVER ['REQUEST_URI'];

// Создаем идентификатор сеанса. Будет действовать как имя пользователя посетителя
если (! Исеть ($ _ SESSION [ 'ID'])) {

$ _SESSION ['id'] = session_id ();

// Для посещения первой страницы
$ visit_id = $ _SESSION ['id'];

} Еще {

// Для последующих посещений любой страницы
$ visit_id = $ _SESSION ['id'];

}

/ ******************
DB запроса. Вставьте только одно посещение на страницу за сеанс. Это означает, что нам нужно подсчитать каждую страницу, чтобы получить ее общее количество посещений. Или подсчет для всех записей, чтобы получить общее количество посещений сайта.
************************************ /
$ query_visits_table = mysqli_query ($ db_connect, "SELECT * FROM tblcount WHERE (visit_id = '$ visit_id') AND (page_name = '$ page_url')");

if (mysqli_num_rows ($ query_visits_table)> 0) {

// Не делайте ничего, если эта страница была посещена во время этого сеанса

} Еще {

mysqli_query ($ db_connect, "INSERT INTO tblcount (visit_id, page_name, visit) VALUES ('$ visit_id', '$ page_url', '1')");

}

// Получить общий доступ к сайту
$ query_site_visits = mysqli_query ($ db_connect, "SELECT * FROM tblcount");

// Для определенной страницы
$ query_specific_page_visit = mysqli_query ($ db_connect, "SELECT * FROM tblcount WHERE page_name = '$ page_url'");

if (isset ($ query_site_visits) && isset ($ query_specific_page_visit)) {

$ site_total_visits = mysqli_num_rows ($ query_site_visits);
$ specific_page_visit = mysqli_num_rows ($ query_specific_page_visit);

echo 'Общее количество посещений сайта'. $ site_total_visits. '<br />';

echo 'Всего посещений для'. $ page_url. ' является ' . $ Specific_page_visit;

Выход();

}