我正在创建一个网站,我需要向用户显示随机片段,这些片段每隔几秒钟就会发生变化。片段数据库本身将非常巨大。我正在考虑的是向他们展示片段而不重复的最佳方式。
所以我的查询如下:
$random = '<value between 1 and row_count of table>';
$query = `select snippet from table limit $random,1`;
然后我向用户展示该片段。这将工作得很好,但我如何确保用户在访问期间不会再次看到相同的片段?另外,没有登录,所以我无法将代码片段与用户 ID 关联起来。
我想我会将片段 ID 存储在 session 中并将其从下一个查询中排除。但我不确定这是否是最好的方法。还有其他解决方案吗?
有什么建议吗?我正在使用 LAMP 进行开发,这就是我添加标签的原因。我知道我还没有发布任何代码..
最佳答案
注意:此解决方案使用 cookie。
- 当用户“加载”代码片段时,将代码片段 ID 存储在 Cookie 中。
- 要加载下一个片段,请搜索 cookie 的值,并使用它生成新的片段 ID。 (提示:使用当前 id(我想它是一个数字)作为 RNG 的种子)如果没有 cookie,则这是第一次访问,然后选择一个随机数。
- 转到#1
如果您将 cookie 的生命周期设置为相对较短,您将非常确定用户不会陷入预定的顺序。
当用户在同一 session 中查看大量片段时,其他解决方案(NOT IN
关键字或方法的派生)无法很好地扩展......并且您应该计划长时间 session ,我希望...Stumbleupon.com 是一个长时间令人上瘾的 session 的好例子,它会获取很多不同的页面。和你的想法很相似。
祝你好运!
编辑:再次思考这个算法,我发现了一个缺陷:如果以先前的 ID 作为种子获得的随机 ID 给出了一个已经使用过的数字,则用户现在处于循环中(例如: #A 生成#B,#B 生成#C。如果#C 生成#A 或#B,则用户处于循环中
)。
因此,如果您的用户发现重复项,您可以添加一个名为“信号重复项”的链接,该链接会简单地删除 cookie 并生成新的随机 ID。这种新方法有 2 个优点:
- 给访客用户一种错觉,认为他可以实际控制工作流程,甚至与其交互
- 解决了上面解释的循环错误。
关于php - 如何向未登录用户显示独特的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16281405/