title: Best practice for assigning A/B test variation based on IP address
body: <p>I am starting to write some code for A/B testing in a Grails web application.  I want to ensure that requests from the same IP address always see the same variation.  Rather than store a map of IP->variant, is it OK to simply turn the IP address into an integer by removing the dots, then use that as the seed for a random number generator?  The following is taking place in a Grails Filter:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>I know that identifying users by IP address is not reliable, and I will be using session variables/cookies as well, but this seems to be useful for the case where we have a new session, and no cookies set (or the user has cookies disabled).</p>