我开始为 Grails Web 应用程序中的 A/B 测试编写一些代码。我想确保来自同一个 IP 地址的请求总是看到相同的变化。与其存储 IP->variant 的映射,不如通过删除点简单地将 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)的情况似乎很有用禁用)。