如何为用户创建唯一标识符以进行跟踪?

时间:2012-03-03 01:30:02

标签: ruby-on-rails ruby ruby-on-rails-3

我希望能够在从我的网站发出的所有邀请链接中添加用户参考参数...例如:

http://site.com/invited_by?=ajraux

如何生成像" ajraux"这样的简短代码?对于我网站上的所有用户?它需要是数据库中的字段吗?可以当场制作吗?网络公司是如何做到这一点的?

由于

3 个答案:

答案 0 :(得分:4)

你可以创建随机数并在base-36中对它们进行编码,这很简单:

rand(1e12).to_s(36)

首次使用时为每个用户生成一个并将其与用户一起存储。在随机令牌(在模型和数据库中)添加唯一约束,并在获得唯一性违规时生成新约束。如果您需要尝试超过五次以获得唯一值,您可能希望在某个地方记录您将看到的警告;如果您开始收到大量警告,请将1e12提升至1e15(或更高)。

这会给你一个随机查找的标记附加到每个用户,标记将是URL安全的,它们生成快速和容易,你不应该得到那么多的碰撞,并且它很容易回溯给用户的一个令牌。

答案 1 :(得分:0)

这样做的一种方法是使用数据库中用户的唯一标识符,例如“id”,但这也很危险,因为您对数据库的了解过多。

因此,你可以为之前的情况添加一个扭曲并加密和解密id,这样当它在url中时它被加密,然后当你收到它时你可以解密它并使用它。

答案 2 :(得分:0)

正如cjapes所说,使用ID不是一个好的解决方案而且mu太短了,答案对大多数情况都有好处。但是,如果您有一个提供虚荣URL的网站,例如 about.me ,那么每个用户都会有一个永久链接类型的列存储他们的虚荣URL。您可以在构建URL时使用该列中的值。

在接收端你可以这样做:

@referring_friend = User.find_by_permalink(params[:permalink])