我开始在Grails Web应用程序中编写一些A / B测试代码。我想确保来自同一IP地址的请求始终看到相同的变体。而不是存储IP->变体的地图,可以通过删除点简单地将IP地址转换为整数,然后将其用作随机数生成器的种子?以下是在Grails过滤器中进行的:
def ip = request.remoteAddr
def random = new Random(ip.replaceAll(/\./, '').toInteger())
def value = random.nextBoolean()
session.assignment = value
// value should always be the same for a given IP address
我知道通过IP地址识别用户是不可靠的,我也将使用会话变量/ cookie,但这似乎对我们有一个新会话,没有设置cookie(或者用户已禁用cookie。)
答案 0 :(得分:5)
您可以简单地使用32位数字并执行ip mod number_of_test_scenarios。或者使用ruby中提供的标准散列函数。但我觉得我应该指出这种方法存在的一些问题: