3 Stimmen

Empfehlungssystem PHP

Ich habe eine mitgliedschaftsbasierte Website und plane die Einführung eines Empfehlungssystems. Meine Website basiert auf Credits. Die Idee ist, dass Benutzer X 100 Bonus-Credits erhält, wenn er Benutzer Y wirbt.

Hat jemand schon einmal ein Empfehlungssystem aufgebaut und wenn ja, welche Hindernisse sollte ich dabei beachten? Ich habe mich heute Abend in SO umgesehen, konnte aber keine passenden Antworten finden.

Meine Theorie ist es, jedem Benutzer eine zufällige Zeichenfolge zu geben, die generiert und in der DB gespeichert wird, wenn sie sich anmelden, der Benutzer wird dann mit einer URL inkl. dieser Zeichenfolge präsentiert, die, wenn sie an jemanden (Benutzer Z) übergeben, Benutzer Z wird dann auf eine Seite gesendet, die Seite verwendet dann die GET-Methode, um die zufällige Zeichenfolge zu sammeln und die DB-Zeile zu aktualisieren, die sie derzeit besetzen, klingt dies machbar oder könnte es leicht durchbrochen werden?

Danke

4voto

Kai Qing Punkte 18675

In der Regel handelt es sich dabei um ein Partnerprogramm. Sie haben es in Ihrer Beschreibung ziemlich genau getroffen, aber ich würde die Empfehlung aus der $_GET-Variable auch in einer Sitzung oder einem Cookie speichern, so dass dem Benutzer eine Gutschrift erteilt werden kann, selbst wenn er von der Empfehlungsseite weg navigiert. Damit meine ich - normalerweise schreibt ein Partnerprogramm Benutzer X nur dann etwas gut, wenn Benutzer Y sich registriert oder etwas kauft. Benutzer Y kann also die Empfehlungsseite aufrufen, sich umsehen und dann den Weg zurück zu einer Registrierungs- oder Kaufseite finden. Zu diesem Zeitpunkt ist die Empfehlungsseite $_GET var verloren und damit auch die Gutschrift. Ihre Empfehlungsseite würde also die Sitzung oder das Cookie für den Empfehlungscode speichern, und Ihre Registrierungsseite oder der Checkout-Callback würde nach diesen Variablen suchen und entsprechend handeln. Ich glaube, dass Scotts Methode gut ist, wenn es Bedenken gibt, wie er erwähnt, aber alternativ könnten Sie wollen, dass die Empfehlung die ganze Zeit statisch bleibt, für Fälle wie Geschäftsempfehlungen, die Leute auf Visitenkarten setzen könnten. Das wird im MLM häufig gemacht, wo die Vertreter Profile auf einer zentralen Unternehmenswebsite erhalten, damit sie keine eigenen erstellen müssen.

Ich weiß nicht, was Sie mit dem Aktualisieren der DB-Zeile, die sie derzeit belegen, meinen. Schlagen Sie so etwas wie ein Zählfeld vor, das eine Zahl enthält, die die Gesamtzahl der Überweisungen darstellt? Wenn ja, würde ich sagen, das ist keine gute Idee. Sie sollten jede erfolgreiche Empfehlung als eigenen Eintrag in einer relationalen Tabelle mit der ID des Empfehlers als gemeinsamen Schlüssel speichern. Auf diese Weise können Sie alle Arten von Postdaten in der Empfehlung speichern, so dass Sie wissen, ob Sie verarscht werden. Zum Beispiel ein Benutzer, der 1.000 Yahoo-Konten erstellt und sich mit seinem eigenen Empfehlungscode anmeldet, nur um Bonuspunkte zu erhalten. Ihre relationale Tabelle könnte eine sich wiederholende IP-Adresse oder eine inkrementelle Empfehlungs-E-Mail erkennen (johndoe1000@yahoo.com, johndoe1001@yahoo.com usw.) und dann wissen Sie, dass Sie etwas unternehmen müssen.

Die Sicherheit Ihres Vorschlags hängt letztlich davon ab, wie Sie mit den Daten umgehen. Wenn Sie blindlings etwas in die DB einfügen, ist alles schädlich. Stellen Sie einfach sicher, dass Sie die Dinge richtig entkommen lassen und das Verhalten im Auge behalten, auch manuell. Dann sollte alles in Ordnung sein.

1voto

Scott Punkte 6586

Wenn der Wert statisch bleibt, kann er mit Sicherheit überschritten werden. Ich empfehle Ihnen, einem Benutzer nicht nur einen Hash zu geben (der Einfachheit halber sagen wir MD5), der dann seine einzige Zeichenkette bleibt. Sie können eine temporäre Tabelle erstellen, die Aufzeichnungen über alle gesendeten Anfragen, die IDs beider Benutzer und einen zufälligen Hash der aktuellen Uhrzeit (z. B. mit der Funktion date()) zusammen mit dem PRIMARY KEY-Wert des Benutzers am Ende für jede einzelne Anfrage enthält. Damit eine Überweisung um Mitternacht gesendet wird, können Sie mit folgendem Befehl einen eindeutigen Hash in mysql erzeugen

SELECT MD5( CONCAT( NOW(),user.id ) ) AS hash FROM user WHERE user.id = #

Wenn Sie jedes Mal denselben Hash verwenden, kann dieser Hash, sobald er von jemandem entdeckt wird, viel leichter ausgenutzt werden als ein anderer Hash für jede einzelne Überweisung, wenn er nicht angemessen verteidigt wird.

1voto

Kristoffer la Cour Punkte 2551

Statt einer zufälligen Zeichenkette könnten Sie einfach den Benutzernamen von Benutzer X?
Außerdem kann es bei zufälligen Zeichenfolgen vorkommen, dass zwei Benutzer die gleiche zufällige Zeichenfolge haben. Oder haben Sie vielleicht geplant, beides zu verwenden?

Ich bin mir nicht sicher, ob ich die Notwendigkeit sehe, die Empfehlung zu sichern: Wovor haben Sie Angst, dass sie missbraucht wird? Ein Benutzer, der mehrere Konten erstellt, um Gratispunkte zu bekommen? Wenn Sie das verhindern wollen, sollten Sie ein Cookie setzen und/oder IP-Adressen überprüfen.

Von welchen Gefahren ist die Rede, wenn jemand in das System einbricht? Gibt es nur kostenlose Punkte oder zahlen die Leute normalerweise für diese Punkte? Und wenn ja, zahlt ein Nutzer für die Registrierung?

Wenn ein Nutzer für die Mitgliedschaft bezahlt, sehe ich keinen Grund, Empfehlungen einzuschränken? Gewähren Sie Benutzer X einfach nichts, bevor Benutzer Y tatsächlich bezahlt hat. Setzen Sie ein Cookie/eine Sitzung, wenn Benutzer Y geworben wird, und wenn sich Benutzer Y registriert, während die Sitzung den Benutzernamen von Benutzer X enthält, gewähren Sie Benutzer X.

Das ist alles, was ich anhand der von Ihnen geposteten Informationen sagen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X