【问题标题】:Create a unique random token string in Yii for users table在 Yii 中为用户表创建一个唯一的随机令牌字符串
【发布时间】:2014-08-18 10:24:12
【问题描述】:

我正在开发一个 Yii 应用程序,它要求 'users' 表有一个 'token' 列,该列需要是基于表中该用户的唯一随机字符串(例如,永远不会相同)令牌两次)。

任何人都可以给我一些关于这样做的提示,或者是否已经设置了 Yii 组件/扩展/生成器来执行此操作。

另外 - 最优化的 db 列类型是什么?

【问题讨论】:

  • 为什么不直接使用sha1($userName.time().rand(1000, 9999)) 或类似的东西?
  • 我的 Yii 版本在我们的产品中是服务器有点旧.. 所以这对我有好处 - 随时添加这个作为答案,我会接受
  • 添加评论作为答案

标签: php database yii token uniqueidentifier


【解决方案1】:

为此,我喜欢使用 CSecurityManagergenerateRandomString()。请注意,它会生成一个包含字符 ~ 和 _

的字符串

DB 列将是一个varchar,其长度与您的字符串长度相同。

【讨论】:

  • 听起来不错,这样可以防止任何冲突吗?例如,如果我有一个包含 200 万行的表,我会得到 200 万个唯一的“随机字符串”吗?
  • 不,这些不是唯一的。如果数据库中已经存在相同的字符串,则必须手动检查并创建一个新字符串。
  • 谢谢 - 这是一个非常好的功能!一旦我们升级到更高版本的 Yii,我们将使用它
【解决方案2】:

我建议只使用散列,它会产生长字符串并使用一些非常独特的字符串进行散列:

sha512($userName.time().rand(1000, 9999));

Some PHP hash algorithms lengths

【讨论】:

    猜你喜欢
    • 2015-02-04
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多