07.11.2017, 21:50
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
Небольшой скрипт, который выводит, дату последнего посещения сайта пользователем
Нормальный ли у меня алгоритм получился?
<?php
/*
В первую куку записывается первый визит и она означает последний визит, при повторном входе, проверяется,
есть ли сессия юзера, если есть то создать вторую куку с визитом и сравнить их и удалить первую куку
и так каждый раз
*/
session_start();
$_SESSION['user'] = 'Dima';
$lastVisit = date('d-m-Y');
if(!empty($_SESSION['user'])) {
if(!isset($_COOKIE['lastVisit'])) {
setcookie('lastVisit', $lastVisit, time() + 3600*24*30);
}
else {
setcookie('lastVisit2', $lastVisit, time() + 3600*24*30);
$lastArr = explode('-', $_COOKIE['lastVisit']);
$newArr = explode('-', $lastVisit);
echo 'Последний визит был ' . (mktime(0, 0, 0, $newArr[1], $newArr[0], $newArr[2]) - mktime(0, 0, 0, $lastArr[1], $lastArr[0], $lastArr[2])) / 86400 . ' дней назад.';
setcookie('lastVisit', '', time());
}
}
?>
|
|
07.11.2017, 21:51
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
Не просто выводит дату, а пишет, сколько дней отсутствовал
|
|
07.11.2017, 23:12
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от DivMan
|
Нормальный ли у меня алгоритм получился?
|
Нет. Браузер записывает куки на диск когда пользователь покидает страницу, до этого момента они содержатся в памяти. Вот почему кука установленная клиентом доступна ему сразу, а для сервера только после следующего посещения страницы. Вы же устанавливаете куку сервером и сразу пытаетесь ее использовать. Здесь же, в условии, повторная установка куки вообще непонятный маневр.
Последнее посещение 8 ноября и текущее 9 ноября, совсем еще не означает, что прошли сутки, это могут быть и секунды. Оперировать надо датой/временем.
Ну и пора бы ознакомиться с разделом дата/время руководства не только с функциями, но и с классом DateTime, в частности http://fi2.php.net/manual/ru/datetime.diff.php.
Получать дату шиворот навыворот, затем ее компоненты переворачивая, это моветон.
Последний раз редактировалось laimas, 07.11.2017 в 23:20.
|
|
08.11.2017, 00:14
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
date_diff?
|
|
08.11.2017, 00:23
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
Почему повторная установка куки вообще непонятный маневр?
А как по другому сохранять последний визит?
|
|
08.11.2017, 00:23
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Это псевдоним функции класса DateTime. Глубже в раздел окунитесь, полезно.
|
|
08.11.2017, 00:27
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от DivMan
|
Почему повторная установка куки вообще непонятный маневр?
|
Если кука не установлена, то считать ничего не надо, просто установка. Если установлена, то считать разницу между текущим временем и сохраненным, обновить эту же установленную куку текущим временем. А у вас:
setcookie(...)
сразу же
$_COOKIE['lastVisit'] - что уже лажа
и затем
setcookie(...)
|
|
09.11.2017, 00:32
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от laimas
|
Браузер записывает куки на диск когда пользователь покидает страницу
|
нет сразу. При этом js доступны куки сразу
запустите с сервера
<?php
setcookie('myCookie', 'test');
?>
<script>
console.log( document.cookie );
</script>
Последний раз редактировалось Vlasenko Fedor, 09.11.2017 в 00:39.
|
|
09.11.2017, 01:24
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Poznakomlus
|
нет сразу.
|
С каких пор такое стало?
Сообщение от Poznakomlus
|
При этом js доступны куки сразу
запустите с сервера
|
Доступны потому, что в памяти, серверу нет.
|
|
09.11.2017, 01:37
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
куки приходят в заголовках
когда браузер получает страницу он записывает куки сразу
убейте процесс браузера, данные будут записаны
|
|
|
|