php - 如何向未登录用户显示独特的内容?

标签 php algorithm session

我正在创建一个网站,我需要向用户显示随机片段,这些片段每隔几秒钟就会发生变化。片段数据库本身将非常巨大。我正在考虑的是向他们展示片段而不重复的最佳方式。

所以我的查询如下:

$random = '<value between 1 and row_count of table>';
$query = `select snippet from table limit $random,1`;

然后我向用户展示该片段。这将工作得很好,但我如何确保用户在访问期间不会再次看到相同的片段?另外,没有登录,所以我无法将代码片段与用户 ID 关联起来。

我想我会将片段 ID 存储在 session 中并将其从下一个查询中排除。但我不确定这是否是最好的方法。还有其他解决方案吗?

有什么建议吗?我正在使用 LAMP 进行开发,这就是我添加标签的原因。我知道我还没有发布任何代码..

最佳答案

注意:此解决方案使用 cookie。

  1. 当用户“加载”代码片段时,将代码片段 ID 存储在 Cookie 中。
  2. 要加载下一个片段,请搜索 cookie 的值,并使用它生成新的片段 ID。 (提示:使用当前 id(我想它是一个数字)作为 RNG 的种子)如果没有 cookie,则这是第一次访问,然后选择一个随机数。
  3. 转到#1

如果您将 cookie 的生命周期设置为相对较短,您将非常确定用户不会陷入预定的顺序。

当用户在同一 session 中查看大量片段时,其他解决方案(NOT IN 关键字或方法的派生)无法很好地扩展......并且您应该计划长时间 session ,我希望...Stumbleupon.com 是一个长时间令人上瘾的 session 的好例子,它会获取很多不同的页面。和你的想法很相似。

祝你好运!

编辑:再次思考这个算法,我发现了一个缺陷:如果以先前的 ID 作为种子获得的随机 ID 给出了一个已经使用过的数字,则用户现在处于循环中(例如: #A 生成#B,#B 生成#C。如果#C 生成#A 或#B,则用户处于循环中)。

因此,如果您的用户发现重复项,您可以添加一个名为“信号重复项”的链接,该链接会简单地删除 cookie 并生成新的随机 ID。这种新方法有 2 个优点:

  1. 给访客用户一种错觉,认为他可以实际控制工作流程,甚至与其交互
  2. 解决了上面解释的循环错误。

关于php - 如何向未登录用户显示独特的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16281405/

相关文章:

php - 何时使用 SQL_NO_CACHE

algorithm - 编译器的 Big-O

python - 改进 Python 迷宫解决程序的性能

php - 所有项目通用的 session.save_handler

asp.net-mvc - 为什么 ASP.NET MVC 中的 SessionID 不断变化?

java - 字符串无法转换为整数 session 属性

php - 如何找到使用最多 CPU 的 PHP 代码行

具有单独样式的表中的 PHP 获取数组

php - MySQL查询优化

algorithm - 元素拾取竞赛的AI算法