2010-03-30 10 views
12

Meine Firma nahm einige alte PHP-Anwendung über. Aufgrund unserer Vorliebe für ASP.net und dem Mangel an Dokumentation vom vorherigen Entwickler, wollen wir nicht viel Ressourcen für die Entwicklung in PHP ausgeben. Für die Implementierung neuer Funktionen erstellen wir eine Asp.net-Anwendung, die für den Benutzer dasselbe Aussehen hat. Wir wollen eine Art "koexistierende" Webanwendung entwickeln. Daher müssen wir Sitzungen zwischen einem PHP- und einem Asp.net-Webapplikationsprojekt teilen, da ein Benutzermanagement mit einer bestehenden MySQL-Datenbank verbunden ist.Wie teilen Sie Sitzungen zwischen PHP und ASP.net-Anwendung?

(z Link ‚A‘ leitet auf der PHP-Website und Link ‚B‘ leitet auf die asp.net Anwendung)

Wie können wir die Sitzung zwischen und PHP und einer asp.net Anwendung teilen?

Und hat irgendjemand einen Hinweis auf dieses "koexistierende" Ding, das in der Entwicklung nützlich sein könnte?

bearbeiten: 6 IIS unsere Zielserver wäre, IIS altough 7.5 auch

Antwort

13

Ich möchte Ihnen sagen, wie ich es tun endete.

Beide Anwendungen greifen auf eine MySQL-Datenbank zu und greifen auf eine "Session" -Tabelle zu, die aus einem Guid, der ID des Benutzers und einem Bestätigungsstring (ich glaube, ich habe den IDUser darin codiert) und einem Datum besteht.

Sitzungen werden nur von der PHP-Anwendung gestartet (aufgrund der Tatsache, dass die PHP-Anwendung immer noch die Hauptanwendung ist). Eine neue Sitzung führt zu einem neuen Eintrag in der Protokolltabelle. Jeder Link in der PHP-Anwendung, der mit der ASP.Net-Anwendung verknüpft ist, enthält GET-Parameter, die die Guid usw. enthalten.

Die ASP.net-Anwendung sucht nach den GET-Parametern und legt den IDUser in der ASP.Net-Sitzung fest , wenn die GET-Parameter auf eine bestehende Sitzung verweisen.

Die Links, die zurück zur PHP-Anwendung zeigen, verwenden die gleiche Technik.

(Es gibt auch andere Dinge zu beachten, wie Timeouts oder Abmeldungen, aber das kann auch behandelt werden)

Alles in allem würde ich sagen, dass mein Ansatz nützlich ist und keiner der Kunden beschwerten sich seit die Bereitstellung (vor mehr als 1 Jahr)

+0

danke für die Lösung, das ist genau das, womit ich auch kämpfte. – Mana

0

http://cz.php.net/manual/en/function.session-set-save-handler.php
http://support.microsoft.com/kb/317604

Sie können PHP-Sitzungen in MsSQL schreiben, eine Option sein würde und .NET konfigurieren verwenden MsSQL als Backend für Sitzungen.

+0

@Yossarian Konfigurieren eines Sitzungszustands in MySQL wird von ASP.NET nicht ganz unterstützt, da es mehrere Standardprozeduren verwendet. Wenn ich mich nicht irre, verwendet es ein 'SqlConnection'-Objekt, um eine Verbindung mit einem ** SQL herzustellen Server ** Back-End. –

+0

Gibt es einen Grund, warum Sie keine Verbindung zu SQL-Server von MySQL über einen anderen Connector herstellen können, und lesen Sie die gleichen Daten wie mit SqlConnection? – nothrow

2

Ich glaube nicht, es ist nativ möglich Sitzungen zwischen PHP und ASP.NET zu teilen.

Es kann jedoch möglich sein, eine PHP-Seite zu verwenden, die den Inhalt der Sitzung liest, sie in ausgeblendeten Feldern speichert und dann eine ASP.NET-Seite aufruft, die diese Felder liest und in die ASP.NET-Sitzung lädt.

Theoretisch ist es möglich.

0

Keine große Sache.
sollte Ihre asp App ein drei einfachen Dinge tun:

  • Recieve einen Sitzungs-Cookie aus dem Client
  • Look für die sess_<id> Datei in der PHP-Speicherpfad der Session
  • eine PHP serialisieren/unserialize Funktionen implementieren Sitzungsdaten lesen/schreiben.
-1

Sanitäter vielleicht eines Tages werden Sie den Fehler Ihrer Möglichkeiten sehen, die in der Zwischenzeit .....

standardmäßig PHP schreibt seine Sitzungsdaten als serialisierte Array in eine Datei mit dem Namen entsprechend der Sitzung. Die Sitzung wird normalerweise durch einen Cookie mit dem Namen PHPSESSID identifiziert.

in PHP So lesen manuell die Sitzung:

$imported_session=unserialize(file_get_contents(session_save_path() . '/' . $_COOKIE[session_name()])); 

Das Format der Datei ist sehr einfach und einfach zu analysieren.

Es ist jedoch recht einfach, einen eigenen PHP-Session-Handler zu implementieren, um die Dateien in einem beliebigen Format/jedem Speicher zu schreiben (siehe Auto-Voranstellen, um den revidierten Code mit jeder Seite zu verknüpfen, ohne neu schreiben zu müssen) Jeder). Oder ändern Sie den Namen des Cookies, der zum Speichern der Sitzung verwendet wurde.

C.

+6

Würde es dir etwas ausmachen, zu erklären "Oh Schatz, vielleicht wirst du eines Tages den Fehler deiner Wege sehen, in der Zwischenzeit ..."? – citronas

0

Eine schönere Art und Weise, als nur das Eindringen in Session-Speichermechanismen auf beiden Seiten OpenID-Provider würde die Einrichtung und Verstopfung OpenId Verbraucher sowohl asp.net und PHP-Anwendungen.

Es gibt viel vorhandenen Code, um es zu tun. Es wäre sowohl eleganter als auch fehleranfälliger als die Low-Level-Lösungen. Als Bonus können Sie das integrierte OpenId-Login in den übrigen Anwendungen Ihres Unternehmens nutzen und zum Firmenhelden werden.

Siehe: Using OpenID for both .NET/Windows and PHP/Linux/Apache web sites

2

Dies ist eine alte Frage, aber ich glaube nicht, dass eine der aktuellen Antworten vollständig war.

Erstens, ich denke, es ist eine schlechte Idee, Sitzungsdaten in einem Datenbankserver wie MySQL oder SQL Server zu speichern. Die DB ist eine wertvolle Ressource, und es gibt wirklich keinen Grund, sie nur für Sitzungsdaten zu verwenden.

Wenn Sie Sitzung in einer Datenbank wie dieser speichern möchten, gibt es "bessere" Möglichkeiten, wie es sicherzustellen, dass die Sitzungsdaten auf seiner eigenen unabhängigen Festplatte usw. sind ... aber ehrlich gesagt, ich immer noch Fühlen Sie sich wie ein Fehler und begrenzen Sie Ihre Skalierbarkeit.

Zum Speichern der Sitzung möchten Sie mit einem einfachen Schlüssel/Wert-Speicher gehen, und meiner Meinung nach können Sie Memcached nicht schlagen (obwohl ich auch viel Glück mit redis + nodejs hatte).

Memcached hat Kunden für so ziemlich jede Sprache auf der Erde zur Verfügung: http://code.google.com/p/memcached/wiki/Clients

Also, im Grunde alles, was Sie tun müssen, wenn Memcached verwendet, ist ein pseudo-zufälligen Zeichen für den Schlüssel zu erzeugen, und eine memcached.set zu tun. Speichern Sie dann diesen Schlüssel in einem Cookie namens Session-ID oder etwas.

Die Session-ID-Cookie kann von einer beliebigen Server Sprache, .net, PHP, Python, was auch immer gelesen werden - und der Sitzungswert mit einem einfachen memcached.get abgerufen.

Überprüfen Sie die Memcached docs aus: http://code.google.com/p/memcached/wiki/NewStart

Dies ist eine sehr einfache und skalierbare Möglichkeit Sitzungen zu tun, und mit fast jeder Sprache/Server arbeiten.

+0

Kann Memcache nicht mit Microsoft Velocity für die Kommunikation zwischen PHP und ASP.NET verwendet werden? Funktioniert Microsoft Velocity mit PHP? Wenn ja, wie gut funktioniert Microsoft Velocity mit PHP? – user1338998