Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2017, 21:50
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 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());
        }
    }
?>
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2017, 21:51
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Не просто выводит дату, а пишет, сколько дней отсутствовал
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2017, 23:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от DivMan
Нормальный ли у меня алгоритм получился?
Нет. Браузер записывает куки на диск когда пользователь покидает страницу, до этого момента они содержатся в памяти. Вот почему кука установленная клиентом доступна ему сразу, а для сервера только после следующего посещения страницы. Вы же устанавливаете куку сервером и сразу пытаетесь ее использовать. Здесь же, в условии, повторная установка куки вообще непонятный маневр.

Последнее посещение 8 ноября и текущее 9 ноября, совсем еще не означает, что прошли сутки, это могут быть и секунды. Оперировать надо датой/временем.

Ну и пора бы ознакомиться с разделом дата/время руководства не только с функциями, но и с классом DateTime, в частности http://fi2.php.net/manual/ru/datetime.diff.php.

Получать дату шиворот навыворот, затем ее компоненты переворачивая, это моветон.

Последний раз редактировалось laimas, 07.11.2017 в 23:20.
Ответить с цитированием
  #4 (permalink)  
Старый 08.11.2017, 00:14
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

date_diff?
Ответить с цитированием
  #5 (permalink)  
Старый 08.11.2017, 00:23
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Почему повторная установка куки вообще непонятный маневр?
А как по другому сохранять последний визит?
Ответить с цитированием
  #6 (permalink)  
Старый 08.11.2017, 00:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Это псевдоним функции класса DateTime. Глубже в раздел окунитесь, полезно.
Ответить с цитированием
  #7 (permalink)  
Старый 08.11.2017, 00:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

setcookie(...)
сразу же
$_COOKIE['lastVisit'] - что уже лажа
и затем
setcookie(...)
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2017, 00:32
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от laimas
Браузер записывает куки на диск когда пользователь покидает страницу
нет сразу. При этом js доступны куки сразу
запустите с сервера
<?php
setcookie('myCookie', 'test');
?>
<script>
    console.log( document.cookie );
</script>

Последний раз редактировалось Vlasenko Fedor, 09.11.2017 в 00:39.
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2017, 01:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Poznakomlus
нет сразу.
С каких пор такое стало?

Сообщение от Poznakomlus
При этом js доступны куки сразу
запустите с сервера

Доступны потому, что в памяти, серверу нет.
Ответить с цитированием
  #10 (permalink)  
Старый 09.11.2017, 01:37
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется создать небольшой скрипт для сайта sana0563 Работа 2 01.12.2016 18:56
Помогите написать скрипт к моему сайту, который выводит окошко со списком заданий litwisha Ваши сайты и скрипты 2 30.12.2012 20:25
Всем привет. Скрипт который сравнивает данные сайта с данными в базе.. strengerst Opera, Safari и др. 6 24.06.2012 22:17