Frage

Ich beginne einen Code für A / B-Tests in einer Grails Web-Anwendung zu schreiben. Ich möchte sicherstellen, dass Anfragen von derselben IP-Adresse immer die gleiche Variation zu sehen. Anstatt speichert eine Karte von IP-> Variante ist es OK, einfach die Adresse in eine ganzen Zahl IP zu aktivieren, indem die Punkte zu entfernen, dann ist das für einen Zufallszahlengenerator als Saatgut verwenden? Im Folgenden findet in einem Grails Filter:

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

Ich weiß, dass Benutzer von IP-Adresse zu identifizieren ist nicht zuverlässig, und ich werde auch mit Session-Variablen / Cookies sein, aber dies scheint für den Fall nützlich zu sein, wo wir eine neue Sitzung haben, und es wird keine Cookies (oder die Benutzer Cookies deaktiviert).

War es hilfreich?

Lösung

Sie können einfach nehmen Sie die 32-Bit-Zahl und tun ip mod number_of_test_scenarios. Oder verwenden Sie eine Standard-Hash-Funktion in Ruby zur Verfügung gestellt. Aber ich glaube, ich soll ein paar Probleme mit diesem Ansatz hinweisen:

  1. Wenn Ihre App hinter irgendwelchen Proxies ist, wird die IP das gleiche für alle Nutzer dieses Proxy sein.
  2. wird Einige Benutzer IPs ändern ziemlich häufig, häufiger als Sie denken. Vielleicht (wie Joel Spolsky sagt) „Das Internet ist für die Benutzer gebrochen“, aber ich würde sagen, es ist ein schlechter Dienst an Ihren Kunden gegeben, wenn Sie im Internet machen für sie gebrochen, vor allem auf subtile Art und Weise, dass sie wahrscheinlich nicht in der Lage, etwas dagegen zu tun.
  3. Für Benutzer, die eine neue Sitzung haben, können Sie einfach das Cookie auf der ersten Anforderung zuweisen und die Zuweisungen im Speicher halten; es sei denn, eine Erstanträge auf mehrere Server gehen Benutzer zur gleichen Zeit das dieses Problem beheben sollte (es ist, was ich auf der App muss ich halten).
  4. Für Benutzer mit Cookies deaktiviert, würde ich sagen: „Das Internet ist gebrochen“, und ich würde nicht zu viel Mühe machen, diesen Fall zu unterstützen; sie würden erhalten auf einen Standardtest Eimer zugewiesen und alle dorthin gehen. Wenn Sie planen, viele solche Benutzer in einer nicht unterbrochenen Art und Weise zu unterstützen, sind Sie Arbeit für sich selbst zu schaffen, aber vielleicht ist das in Ordnung. In diesem Fall können Sie diese Benutzer mit URL-Rewriting und 302 Umleitungen berücksichtigen unten ein Szenario zu senden oder zu einem anderen. Doch meiner Meinung nach nicht wert ist die Zeit.
  5. Wenn die Benutzer in die Website einzuloggen machen, dass Sie die Szenario-Zuordnungen in der Datenbank erfasst und die Cookie / db Abweichungen entsprechend abzustimmen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top