我问:显然如何生成如何生成随机查询字符串/url。
可以在许多地方找到:
http://www.youtube.com/watch?v=IMl7pvaWzh8
^
|
+----------------
http://jsfiddle.net/xeolabs/LSTKM/light/
^
|
+----------------
http://jsbin.com/asapay/1/edit
^
|
+----------------
我被告知(似乎逻辑),当服务器选择新的URL时,它不会检查它是否是免费的(以前没有选择)
另外,我被告知它可能是一个公式的结果,例如: f(n+1) = f(n)+1
(所以它根本不是随机的。
因此,新的URL参数是由于最后一个生成的URL参数而生成的。
我的问题:
我在哪里可以找到这样的发电机功能?
当然,我可以建立自己的一个这样的17 = 16 1,但是我正在寻找准备就绪喜欢:
f(n+1) = f(n)+1
,有大写,较低的情况,数字。和
当然最小碰撞和零预测。
你知道,专业人士...
我只是很好奇Google/YouTube/jsbin/jsfiddle每天都有数百万个请求来完成。
大声思考,但是您可以预先计算出巨大的独特哈希列表,然后将它们分配给任何新输入。预先计算将确保您可以继续检查碰撞,因为这不是实时的要求。您可以考虑在此问题中生成随机哈希。
这不能完全回答您的特定问题,但是如果您需要返回独特且不可预测的字符串的函数,则有一个:
Guid.NewGuid().ToString()
我经常在各种情况下使用它来形成唯一的Querysring。
System.IO
具有随机的文件名发生器,也许您可以劫持。
string randomString = System.IO.Path.GetFileNameWithoutExtension(System.IO.Path.GetRandomFileName());
返回如" jdvpmpre"之类的东西
您可以一起加入一对夫妇以使其更加独特,但这将是一个简单的解决方案。
一个解决方案(我已经使用过)可能就是这样:
需求:一个增加顺序数字的唯一来源(例如Oracle中的序列或SQL Server中的自动插入索引) - 您可以可靠地处理以生成这种增量源的任何东西。
工作流以生成每个新URL(或您需要的任何内容):1-获取序列的下一个值。2-将其转换为基本的36个数字(您可以在C#中的实现Google上进行Google搜索)。3-使用URL中生成的基本36号(或您在做什么,例如修改数据库等)。
。基本36号的注意:我们在日常操作中使用十进制系统,其中包含10位数字。我们在计算机中使用HEXA小数数,该计算机是由16位数字(0-9加a,b,c,d,e和f)产生的。现在,也有一个基本36系统,该系统是通过使用36位数字产生的。0-9和A-Z以及所有数字都是字母数字。因此可以在URL中轻松使用。Wikipedia页面的一个示例:2,821,109,907,456小数点将为CRE66I9在基地36中。
继续我的评论,
假设您有几个位置正在接受输入并产生独特的令牌,我说您可以分区范围。例如,说您在以色列有一个网站,一个在美国有一个网站,并且您希望两者都生成独特的令牌(您不希望在这些网站上生成的令牌之间有任何重叠),您可以使用独特的数据库来存储当前的当前令牌值。
(1)这是场景。DB以值1的令牌开头。
(2)以色列网站要求数据库获得一些新的代币,数据库的范围为1-1000(不是令牌,而是范围)。这样,以色列网站不必为每个新请求返回到DB,直到用来用尽所有1000个令牌。
(3)美国站点进入DB并获得令牌1001-2000范围。
(4)在我们的示例中,您有2个消费者和1名生产者(DB)。假设是您想尽可能少地使用DB,以免阻止其他消费者。因此,如果每个生产商需要1秒钟才能到达DB,那么DB应该给每个消费者多少ID。答案是消费者使用/1秒 *消费者数量的ID数量。这样,消费者就不会陷入僵局,彼此等待DB变得免费。
那么这些生产商如何利用范围?他们可以通过增加计数器来为从DB收到的范围生成基本72令牌。为什么要基础72?因为这给出了大量的象征。要提出72,我使用了0-9键上的A-Z,A-Z,0-9,特殊字符:25 25 10 10。您可以超过72。
在:
上找到会话令牌的实现https://github.com/hoytech/session-token
还有这个问题可能有帮助:
如何生成一个随机的alpha数字字符串?