【问题标题】:"New Content Avaliable!" PHP message checking a cookie“新内容上线!” PHP 消息检查 cookie
【发布时间】:2010-02-22 01:52:05
【问题描述】:

我正在尝试设置一个 cookie 来存储用户离开网站的时间,因此在下次访问时,他可以找到“有新内容”消息(如果有的话) - 检查他的“最后一次看到” " 存储时间。

我遇到的问题有两个:当他离开网站时,我如何发送 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() 的函数,我仍然需要弄清楚,但我主要关心的仍然是发送 cookie 的时间。

非常感谢您提供任何输入/替代解决方案。

【问题讨论】:

    标签: php session comments cookies


    【解决方案1】:

    我认为当他离开网站时并不重要,而是加载页面时页面上的 cmets 是什么。例如:

    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==
    

    在这种情况下,应该通知他有新的 cmets,因为他上次看到页面时,只有 1-2 个 cmets。

    【讨论】:

    • 好点,我现在都不知道为什么我会反过来想
    • 是的,因为他可以在浏览一番后阅读评论 3,然后无论如何都会收到消息(有或没有第 4 条)。但是,无论如何,这总比没有通知要好。
    【解决方案2】:

    您可能要考虑使用 PHP 的 built-in session handling$_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>";
        }
    ?>
    

    【讨论】:

      【解决方案3】:

      你必须使用 javascript。

      一种方法是让用户的浏览器每隔五分钟左右对服务器执行一次 ping 操作。如果用户在 6-7 分钟内没有 ping 服务器,他就消失了。

      编辑:为了提供更多细节,您需要做的是向服务器发送一个盲目的 ajax 请求(所以不要费心等待响应或任何东西)。接收请求的脚本应该更新用户在数据库或任何地方的“last ping”字段。要找到他们最后一次访问的时间,它是“最后一次 ping”+ ping 之间的时间。

      如果您只想列出新的 cmets,这实际上不是必需的,因为在这种情况下,您可以简单地记录用户查看页面的时间,并在下次用户访问时显示 cmets(如 FryGuy 所述) .

      但是 ping 方法确实解决了您查找自用户上次访问以来的时间量的问题。

      一个明显的问题是如果用户没有javascript。为了尽量减少由此引起的问题,请在每次用户查看页面时使用 PHP 更新“最后一次 ping”。

      【讨论】:

      • ping 的想法非常聪明。不错。
      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多