«Новый контент доступен!»PHP сообщение проверяет куки - PullRequest
1 голос
/ 20 февраля 2010

Я пытаюсь настроить cookie-файл, в котором будет храниться время, когда пользователь покидает веб-сайт, поэтому при следующем посещении он может найти сообщение «Новый контент» (если есть) - проверено по его «последнему просмотру». "сохраненное время.

Вещи, с которыми я застрял, две: как мне отправить куки, когда он покидает сайт? И затем, как я могу проверить эти данные, когда он возвращается, по сравнению со временем последнего опубликованного контента?

Это код, который у меня сейчас есть:

<!-- I send the cookie -->

    <?php

        // How long should something be considered new for? (In seconds.)
        // seconds * minutes * hours * days
        // Default is 72 hours (3 days).

        $stillnew = 60*60*24*3;

        setcookie('CookiePublishing', time()-$stillnew, time()+60*60*24*30, '/');

    ?>

<!--I check the cookie and print -->

    <?php

        $entrydate = last_comment_time();

        if ($_COOKIE['CookiePublishing'] < $entrydate) {
        echo '<p>New Comment!</p>';
        }

    ?>  

Как вы видите, я представляю себе функцию с именем last_comment_time(), которую мне еще предстоит выяснить, но моей главной заботой по-прежнему будет момент отправки куки.

Большое спасибо за любые входные / альтернативные решения.

Ответы [ 3 ]

3 голосов
/ 20 февраля 2010

Я не думаю, что это имеет значение, когда он покидает сайт, а, скорее, какие комментарии на странице, когда он загружен. Например:

12:00 comment1
12:05 comment2
==loaded at 12:10, sees comments 1-2==
12:15 comment3
==leaves site at 12:20==
==arrives again at 1:10==

В этом случае он должен быть уведомлен о появлении новых комментариев, так как в последний раз, когда он видел страницу, были только комментарии 1-2.

1 голос
/ 20 февраля 2010

Возможно, вы захотите использовать встроенную в PHP обработку сеансов и использовать $_SESSION.

В любом случае вам может потребоваться решить эту проблему, используя две переменные: одну для последнего времени доступа и одну для текущего времени доступа; когда страница загружена, установите время последнего доступа к текущему, а затем установите текущее время для системного времени. Таким образом, вы можете определить контент по значению последнего доступа.

Например:

<?php
    // set cookies
    session_start();
    $_SESSION['lastAccess'] = $_SESSION['currAccess'];
    $_SESSION['currAccess'] = time();
    // send the cookies in the HTTP headers
    session_write_close();
?>

...

<?php
    $last_stillnew = last_comment_time() - 60*60*24*3;
    if ($_SESSION['lastAccess'] < time()-$last_stillnew) {
    print "<p>New comment!</p>";
    }
?>
0 голосов
/ 20 февраля 2010

Вы должны использовать JavaScript.

Один из способов сделать это - заставить браузер пользователя пинговать сервер каждые пять минут или около того. Если пользователь не пингует сервер в течение 6-7 минут, он ушел.

edit: Чтобы дать немного больше подробностей, вам нужно отправить слепый ajax-запрос на сервер (так что не беспокойтесь о получении ответа или чего-либо еще). Сценарий, получающий запрос, должен обновить поле «последний пинг» пользователя в вашей базе данных или где-либо еще. Чтобы найти последний раз, когда они посетили, это «последний пинг» + время между пингами.

Это на самом деле не нужно, если вы просто хотите перечислить новые комментарии, так как в этом случае вы можете просто записывать время, когда пользователь просматривает страницу, и отображать комментарии с тех пор при следующем посещении пользователем (как упомянул FryGuy) .

Однако метод ping действительно решает ваш вопрос о том, сколько времени прошло с момента последнего посещения пользователя.

Одна очевидная проблема заключается в том, что у пользователя нет JavaScript. Чтобы свести к минимуму проблемы, вызванные этим, обновляйте «последний пинг» PHP каждый раз, когда пользователь просматривает страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...