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