2008-11-25 88 views
3

在我通常会去的一些网站或论坛上,我还没有阅读的条目标记为“新”。我想在我开发的网站上实现这个功能(不时发布新闻) - php/mySQL。这通常如何完成?是否需要使用记住上次访问日期/时间的cookie?或最近查看的帖子/网址?我如何识别用户?标记最新消息为...“新”

回答

3

Cookie只是识别会话用户或访问未经身份验证的用户的一种可能方式。虽然是一种非常普通而且有用的方法(PHP也可以使用sid或其他参数,尽管它不再常见)。

您需要存储用户已阅读哪些线索/帖子,或他/她没有的帖子。您可以在'date'或postId之前阅读某些subforums的内容。

这一切都取决于您的论坛,帖子和新闻的布局,以及它们的动态。您可能还只想显示自上次访问以来的新帖子,当用户目前在您的网站时显示新帖子,然后使用自上次访问以来的新帖子,如果用户离开的时间超过预定义(x小时)/计算(如果周末时间为y小时,如果管理员时间为z小时)。

编辑:被访问的链接的CSS不会帮助你新闻评论,线程中的新帖子,直接去第一个未读的帖子或在工作/学校和家中访问该网站。

+0

这非常有洞察力!谢谢 ! – RaGE 2008-11-26 12:17:07

0

Cookie是做这类事情的唯一可靠方法。

我会使用一个cookie来存储用户上次访问的时间,但如果cookie不存在,也会有一个合理的默认值,例如1周。

然后针对比该日期更新的事物展示新的东西。

0

您可以将实际上次访问日期存储在Cookie中,也可以将该人员的唯一ID存储在Cookie中,并跟踪他们上次在数据库中读取的内容。如果你使用后者,你可以允许他们在不同的浏览器上使用相同的ID登录,并且仍然可以获得准确的计数。

0

我做这种方式:

  • 如果用户没有用户名和未登录,那么我不显示新项目。
  • 如果用户已登录,并且已显示所有项目,则我将当前日期/时间存储在用户文件中,然后使用此值确定哪些项目是新的。
  • 如果用户日期/时间在最后十分钟内,那么我不更新用户日期/时间。

这里是我的代码...

function drawPage 
    if (isLoggedIn) 
     get dbUser from database 
     lastUserDateTime = dbUser.LastCommentTime 
    else 
     lastUserDateTime = yesterdaye 
    end if 

    for each post 
     get date of post 
     if post->date < lastUserDateTime mark it as new 
     draw the post 
    loop 

    if (isLoggedIn) 
     if (lastUserDateTime + 10 mins) < now 
      dbUser.LastCommentTime = now 
      update dbUser in database 
     end if 
    end if 
end function 
3

一个侧面说明:这样做实际上将被复制浏览器功能:(只要你使用固定URL)的浏览器将在给链接不同的风格访问链接。当然,如果你清除历史记录,这将重置,但如果cookie被删除,那么基于cookie的解决方案将再次清除(许多浏览器具有“删除私人数据”功能,这两个功能在默认情况下都会删除,通常会重置为同一时间)...

此网站有固定的网址(对于问题)并且不会将访问颜色设置为与正常链接颜色相同,因此您可以通过链接颜色查看您访问过的问题。

编辑:你也可以使用CSS到add an icon to visited links

+0

谢谢比尔,当我开始写作的时候,我实际上正在考虑这个问题,但我忘了......;) – 2008-11-25 14:53:02