2010-04-23 11 views
7

Ich habe ein paar Antworten auf SOF gesehen, aber die meisten davon sind mit der Verwendung von Subdomains, von denen keine für mich gearbeitet haben. Das Gemeinsame ist, dass die Verwendung von session.cookie_domain, die von meinem Verständnis wird nur mit Sub-Domains funktionieren.PHP Shared Sessions über Domain

Ich interessiere mich für eine Lösung, die Angebote mit völlig anderen Domänen behandelt (und die Möglichkeit von Subdomains umfasst). Leider sind die Projekttermine genau das, was sie sind. Die Zeit ist nicht auf meiner Seite, deshalb wende ich mich an das Fachwissen und die Erfahrung von SOF.

Die aktuelle Projektbeschreibung besteht in der Möglichkeit, sich an einer Site anzumelden, die derzeit nur die user_id in der Sitzung speichert und dann diesen Wert in einer anderen Domäne innerhalb derselben Serverumgebung abrufen kann. Sitzungsdaten werden aus einer Datenbank gespeichert/abgerufen, wobei session id der Primärschlüssel ist.

Ich hoffe, eine "leichte wie" und "einfach" zu implementieren Lösung zu finden.

Das System verwendet ein internes Model View Controller-Entwurfsmuster, sodass alle Anforderungen (einschließlich verschiedener Domänen) durch ein einzelnes Bootstrap-Skript ausgeführt werden. Wenn Sie den Domänennamen als Variable verwenden, bestimmt dies, welcher Kontext dem Benutzer angezeigt werden soll.

Eine Option, die Potenzial zu haben scheint, ist die Verwendung eines versteckten Bildes und die Verwendung des alt-Tags, um user id zu setzen. Meine ersten Eindrücke deuten darauf hin, dass dies sofort "zu einfach" erscheint (wenn möglich) und mit Sicherheitslücken übersät ist. Discussieren?

Eine weitere Option, die ich in Betracht gezogen habe, ist die Verwendung des IP und des User Agent zur Authentifizierung, aber auch dies wird aufgrund der gemeinsamen Netzwerke und sich ändernden IP-Adressen keine zuverlässige Option sein.

Meine dritte Option (und bevorzugt), die ich in Betracht gezogen und noch nicht besprochen habe, ist die Verwendung htaccess, um den Benutzer zu denken, dass sie sich auf einer anderen Domäne befinden, wenn infact apache umleitet; so etwas wie

www.foo.com/index.php?domain=bar.com&controller=news/categoires/1
sondern zeigt dem Benutzer als
www.bar.com/news/categories/1

foo.com stellt die „Haupt-Website-Domain“, die alle Anforderungen werden durchlaufen und bar.com ist, was der Benutzer denkt, dass sie zugreifen. Die Controller-Anforderung bestimmt, dass die Seite und die Ansicht angefordert werden. Ist das möglich?

Gibt es andere Optionen? Für und Wider?

Vielen Dank im Voraus !!!

+0

Leider vergaß zu erwähnen, ich zurzeit das System vor Ort (mit XAMPP). Ich verwende eine Mischung aus lokalen Domain-Namen (bearbeitete Host-Datei) und Domains, die von Fasthost gehostet werden, um sie an meine IP weiterzuleiten. Ich denke nur, dass dies meine aktuellen Tests beeinflusst. – bigstylee

Antwort

-3

Zum Vorteil für alle anderen, die an dieser Funktionalität interessiert sind, gibt es keine einfache Antwort, fürchte ich. Google "Single Sign On" und es wird wieder mit der Technologie und einigen Lösungen zur Verfügung stehen.

Wenn Sie htaccess verwenden, um den Domänennamen auszublenden, ist dies nicht möglich, da er für bösartige Aktivitäten verwendet werden könnte.

Ich habe jetzt erfolgreich ein System implementiert, um meine Anforderungen zu erfüllen.

+1

Dies ist keine Antwort. Du erzählst uns nicht, was du getan hast. – Flimzy

0

Haben Sie über die Verwendung von session_set_save_handler nachgedacht? Sie können Ihre Sitzungen in einer Datenbank speichern und von jeder Domäne aus darauf zugreifen.

+1

Ich benutze das. Das Problem ist, dass die von PHP generierte Session_ID für jede Domain unterschiedlich ist. – bigstylee

+0

können Sie den Benutzer nicht anhand der Sitzungs-ID identifizieren? Verwenden Sie eine andere Spalte in der Tabelle. Sie haben mehrere Zeilen für jeden Benutzer, aber Sie können eine Zeile auf denselben Wert setzen. Ich habe das noch nie gemacht, nur Sachen rausgeschmissen. – Galen

+1

foo.com gibt eine Sitzungs-ID von ABC123 und bar.com gibt eine Sitzungs-ID von QWERTY. Wenn ich IP/UserAgent nicht vergleiche, gibt es keine Möglichkeit (die ich kenne) zu wissen, dass ABC123 und QWERTY auf denselben Benutzer verweisen. Die Datenbankabfrage, die die Sitzungsdaten abruft, lautet SELECT * FROM-Sitzungen WHERE session_id = "% string". Oder vermisse ich deinen Punkt? – bigstylee

0
  1. definieren einen Hauptsitzungsserver (ich dies mit Memcached in Kombination tun)

  2. Verwendung Ajax/JSON (P) eine Sitzung von diesem Server anzufordern, dies ermöglicht es Ihnen, Sitzungen über mehrere Domänen zu teilen

  3. Wiederverwendung dieser Sitzung