【发布时间】:2010-09-23 22:48:17
【问题描述】:
在我经常访问的一些网站或论坛上,我尚未阅读的条目被标记为“新”。我想在我开发的一个网站上实现这个功能(不时发布新闻)——php/mySQL。这通常是怎么做的?是否需要使用 cookie 来记住上次访问日期/时间?或者最后查看的帖子/网址?如何识别用户?
【问题讨论】:
在我经常访问的一些网站或论坛上,我尚未阅读的条目被标记为“新”。我想在我开发的一个网站上实现这个功能(不时发布新闻)——php/mySQL。这通常是怎么做的?是否需要使用 cookie 来记住上次访问日期/时间?或者最后查看的帖子/网址?如何识别用户?
【问题讨论】:
Cookie 只是在会话中识别用户的一种可能方式,或者对于那些未经身份验证的用户在访问之间进行识别的一种可能方式。虽然是一种非常常见和有用的方式。 (PHP 也可以使用 sid 或其他参数,尽管它不再常见。)
您需要存储用户已阅读或未阅读的线程/帖子。对于某些子论坛,您可以通过在“日期”或 postId 之前阅读所有内容来总结事情。
这一切都取决于您的论坛、帖子和新闻的布局,以及它们的动态程度。您可能还只想显示自上次访问以来的新帖子,在用户当前在您的站点时显示新帖子,然后如果用户离开的时间超过预定义(x 小时)/计算( y 小时(如果是周末),z 小时(如果是管理员)时间。
编辑:已访问链接的 CSS 不会帮助您处理新闻的新 cmets、线程中的新帖子、直接转到第一个未读帖子或访问工作/学校和家中的网站。
【讨论】:
附注:这样做实际上会复制浏览器功能:(只要您使用固定的 url)浏览器会在访问的链接上为链接提供不同的样式。当然,如果您清除历史记录,这将重置,但是如果 cookie 被删除,仅基于 cookie 的解决方案将再次清除(许多浏览器具有“删除私人数据”功能,默认情况下会同时删除两者,通常会在同时)...
本站有固定的url(用于提问),并没有将访问的颜色设置为与正常链接颜色相同,因此您可以通过链接颜色看到您访问的问题。
编辑:您也可以使用 CSS 来add an icon to visited links。
【讨论】:
Cookie 是做这类事情的唯一可靠方法。
我会使用 cookie 来存储用户上次访问的时间,但如果 cookie 不存在,我也会有一个合理的默认值,比如 1 周。
然后针对比该日期新的事物显示新的。
【讨论】:
您可以将实际的上次访问日期存储在 cookie 中,也可以只将该人的唯一 ID 存储在 cookie 中并跟踪他们最后在数据库中读取的内容。如果你做后者,你可以让他们在不同的浏览器上使用相同的 id 登录,仍然可以获得准确的计数。
【讨论】:
我是这样做的:
这是我的代码...
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
【讨论】: