Webforums上的“标记为读取”系统如何工作?

时间:2009-03-11 20:03:18

标签: forum

我一直想知道这件事。我想知道网络论坛实现的选项突出你没有读过的东西。论坛如何知道。

由于大多数网络论坛都有向您显示自上次访问以来所有帖子的功能,因此他们必须保存您上次访问数据库中用户数据中的某个网页的时间。

但这并没有解释在您只阅读一个主题后如何突出显示个别主题。

7 个答案:

答案 0 :(得分:3)

将用户与主题/帖子连接起来的多对多表格,其中包含阅读/收藏等标志。

答案 1 :(得分:2)

许多网络论坛都存储了您上次查看每个主题时的大量列表。

这很快失控,但有缓解措施。见Determining unread items in a forum

答案 2 :(得分:1)

通常,此“未读”项目列表仅显示自您上次注销后所做的更改。

使用用户的上次活动日期/时间将项目标记为“未读”(该时间之后主题中的任何活动都标记为“未读”)。然后存储在Session变量中,该变量是用户自上次登录后查看的主题ID列表。将这两者结合起来可以为您提供相对准确的未读主题列表。

当然,这些数据会在注销或会话到期时丢失,并且周期将重新开始,而不会牺牲不必要的SQL查询量。

答案 3 :(得分:1)

在我以前使用的自定义论坛上,我们使用了您上次访问时间的组合(每次查看另一个页面时更新 - 通常是烹饪),以及每个主题上添加日期的“标记阅读”按钮/包含UserID,TopicID和日期/时间的SQL表的时间值。

因此,为了查看新主题,我们会查看您上次访问的日期,在该时间点之后创建的任何内容都是一个新主题。

一旦您输入主题,您单击“标记读取”的任何主题将仅显示初始主题,然后在您单击标记读取按钮后添加日期/时间的任何回复。如果您的查看器和性能较少,您可以基本上将其设置为在用户点击它时点击的每个主题为表添加条目。

答案 4 :(得分:1)

跟踪访问者阅读的帖子当然不是什么大问题。由于访问者阅读的帖子数量很可能比未阅读的帖子少得多。因此,如果您知道访问者阅读的帖子,您也会知道此访问者没有阅读的帖子。为了减少计算量,你通常只会在一段时间内这样做,比如过去两周。在此之前的所有内容都将被视为已阅读。

答案 5 :(得分:0)

您拥有的另一个选项,我在vBulletin安装之前实际看到过这个选项,就是在cookie中存储以逗号分隔的已查看主题ID客户端列表。

服务器端,唯一存储的是用户上次访问的时间。论坛系统将此与用户cookie中的信息结合使用,以显示任何主题的“读取”

  • 上次修改日期(即上次发布)早于用户之前的访问
  • 在用户的Cookie中找到的主题ID,作为用户访问此会话的主题。

我不是说这是一个好主意,但我认为我会把它作为一种替代方案 - 显而易见的方法已经在其他答案中说明了,即存储服务器 - 作为关系表(多对多表)。

我想它确实具有减少保留该信息的服务器负担的优势。

缺点是它将它与会话联系起来,因此一旦新会话开始,在上次会话之前发生的所有事情都被视为“已经读取”。另一个缺点是cookie只能容纳如此多的信息,用户可以在会话中查看数百个主题,因此它会接近cookie的存储限制。

答案 6 :(得分:0)

另一种方法:

  • 确保您的样式表显示访问链接和非访问链接之间的明显差异,充分利用浏览器持久记住访问过的网页这一事实。

然而,要实现这一点,您需要为主题提供一致的URL,并且大多数论坛系统都不倾向于这样做。另一个缺点是用户可能会清除其历史记录,或使用多个浏览器。因此,这一措施成为“不太可靠的类别”;您可能只是为了增加您用于跟踪所查看主题的其他衡量标准。