我正在用PHP/MySQL/jQuery构建一个社交网站.一旦用户登录到我的网站,我想查询数据库并获得管理员通知(如果存在).这将是一个消息框,在页面上显示给所有用户,但它将有一个X点击它,并且在管理员发布新的公告消息之前不再显示它.因此,如果您从未单击过X并且数据库中存在公告消息,它将始终在您的页面上显示此消息框,但是如果您确实cli9ck X关闭该框,那么您将返回到该页面除非有新的管理员消息,否则不在那里.
我知道有几种方法可以做到这一点,但我正在寻找最有效的方法.
我有一个想法,如果我在用户的表"admin_message"上添加一个额外的mysql字段并将其标记为0,那么当我发布一个新的管理员消息时,它会将每个用户的记录更改为1,如果管理员消息设置为1然后它显示在用户的页面上.然后,当用户单击X以隐藏该框时,它将更新用户表行并将该值重新设置为0.
我的另一个想法是使用cookie检查用户是否选择隐藏消息,我认为这会更快但可能不那么好,因为用户可以使用不同的计算机登录,如果显示新消息,他们可能不能马上看到它.
所以我只是想知道使用额外的数据库字段是不是一个坏主意?如果我有1,000,000个用户,当我发布新的管理员消息时,我需要更新1,000,000行以确保每个人都能看到该消息.有没有更好的办法?此外,一旦用户登录我的网站,我将使用会话来存储他们看到或隐藏消息的值,而不是在每次加载页面时查看数据库.
UPDATE
对不起我认为我的帖子可能有点令人困惑或者不清楚我究竟是什么意思,因为大多数回复都是针对一个消息系统,而这个系统并不接近.
请忘记留言,我会尝试用不同的词来解释.假设网站上有1个管理员,这是唯一一个可以向用户发布消息的管理员.用户只会看到1条消息,如果在网站的生命周期内发布了2352345234条消息,则无所谓,它们只会看到1条消息,即最新消息.
现在,一些登录并在页面上看到此消息"div"的用户可能厌倦了查看它,因此他们将能够隐藏它再次显示.
在页面上显示此消息就像是或否一样简单.
但是,如果我决定需要为所有用户发布新的管理员消息,那么即使是选择隐藏但未显示管理员消息的用户仍会再次看到它,直到他们选择再也看不到它为止.
两个简单的解决方案如下:
好:检查用户cookie,如果它包含指示消息已显示的标志,则不显示该消息,否则显示它。当用户关闭它时,更新cookie。优点:绝对简单。缺点:用户可能会看到同一消息两次,具体取决于他们是否清除 cookie 或从另一台计算机登录。
更好:在数据库中的某个位置存储一个标志(您现在可以将其存储在管理员用户表中,然后将其分解到另一个表中)。当用户登录时,1)将此标志保存到用户的cookie或会话中,2)更新数据库,3)决定是否需要显示消息。当用户关闭消息时,更新 cookie/会话和 DB。优点:用户永远不会两次看到该消息。缺点:稍微复杂一些,因为您需要维护数据库中的标志。
实现细节:对于该标志,您可以按照建议使用消息 ID,或者很可能您已经保留了用户的上次登录时间戳并可以使用它。