Сделать Ajax вызовов на PHP на JS события загрузки страницы и прямо перед отпуском (onbeforeunload
событие).
Лучше полагаться на библиотеку JS, такую как jQuery, поскольку прямая межсетевая реализация JS обоих прослушивателей событий довольно сложна для кода.
Обновление. Благодаря комментарию @piers, я вижу, что мое решение не является полным, так как оно подсчитывает обновление страницы. Если я правильно понимаю задачу, цель состоит в том, чтобы подсчитывать, что страница открывается и уходит, не считая событий обновления.
Возможно, нет необходимости отменять сеанс на закрытой странице - пусть он исчезнет при тайм-ауте на сервере?
Вы можете использовать session_id для определения уникальности пары страниц/сеансов. Например, вы можете сохранить посещенных URL-адреса страниц в сессии, чтобы проверить, если вы уже подсчитали, что в:
<?php
$uri = $_SERVER['REQUEST_URI'];
if(is_set($_SESSION['seen']) {
if(!in_array($uri, $_SESSION['seen'])){
countup($uri);
} else {
// already counted that page
}
} else { // session doesn't have the seen array yet
countup($uri);
}
function countup($uri) {
$_SESSION['seen'][] = $uri;
mysql_query("
INSERT INTO najd_visit
(visit_userId, visit_staticId, visit_page, visit_enterTime)
VALUES ('$userId', '$Sid', '$title', '$date')
");
echo "This is my site";
}
?>
Вы будете записывать в sqli hell для вставки переменных непосредственно в запрос. Используйте PDO или mysqli и вставьте их в качестве параметров –
Почему вы не можете позволить функции JavaScript обнаруживать, когда пользователь уходит? –
Возможный дубликат [Закрыть/убить сеанс, когда браузер или вкладка закрыты] (http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is -closed) – Quentin