2010-03-30 11 views
12

La mia azienda ha richiesto una vecchia applicazione php. A causa della nostra preferenza per ASP.net e per la mancanza di documentazione dello sviluppatore precedente, non vogliamo spendere molte risorse per lo sviluppo in PHP. Per implementare nuove funzionalità, creeremo un'applicazione Asp.net che ha lo stesso aspetto per l'utente. Vogliamo sviluppare una sorta di applicazione web "coesistente". Pertanto, è necessario condividere sessioni tra un progetto di applicazione web PHP e Asp.net, in quanto esiste una gestione degli utenti in un database MySQL esistente.Come condividere sessioni tra PHP e l'applicazione ASP.net?

(ad esempio link 'A' indirizza al sito web PHP e link 'B' indirizza l'applicazione asp.net)

Come possiamo condividere la sessione tra e PHP e un'applicazione asp.net?

E qualcuno ha un suggerimento per questa cosa "coesistente", che potrebbe essere utile nello sviluppo?

Edit: IIS 6 sarebbe il nostro server mirato, benche IIS 7.5 potrebbe anche essere un'opzione

risposta

13

voglio dire, come ho finito per farlo.

Entrambe le applicazioni accedono a un database MySQL e accedono a una tabella "sessione", che consiste in un Guid, l'ID dell'utente e una ConfirmString (credo di aver codificato l'IDUser in esso, in qualche modo) e una data.

Le sessioni sono avviate solo dall'applicazione PHP (poiché l'applicazione PHP è ancora l'applicazione principale). Una nuova sessione risulterà in una nuova voce nella tabella dei registri. Ogni collegamento nell'applicazione PHP, che collega l'applicazione ASP.Net contiene GET-Parameters, contenente il Guid ecc.

L'applicazione ASP.net verifica i parametri GET e imposta l'IDUser nella sessione ASP.Net , se i Parametri GET indicano una sessione esistente.

I collegamenti che puntano all'applicazione PHP utilizzano la stessa tecnica.

(ci sono anche altre cose da considerare, come il timeout o disconnessioni, ma che può essere gestita come bene)

Tutto sommato, direi che il mio approccio è utile e nessuno dei clienti si sono lamentati in quanto la distribuzione (oltre 1 anno fa)

+0

grazie per la soluzione, questo è esattamente quello con cui ero anche alle prese. – Mana

0

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

È possibile scrivere le sessioni di PHP in MsSQL, e configurare .NET per utilizzare MsSQL come back-end per le sessioni.

+0

@Yossarian che configura uno stato sessione in MySQL non è abbastanza supportato da ASP.NET poiché utilizza diverse procedure standard e, se non erro, utilizza un oggetto 'SqlConnection' per connettersi a un ** SQL Server ** back-end. –

+0

c'è qualche ragione per cui non è possibile connettersi al server sql da mysql tramite un altro connettore e leggere gli stessi dati di SqlConnection? – nothrow

2

Non penso che sia nativamente possibile condividere sessioni tra PHP e ASP.NET.

Tuttavia, potrebbe essere possibile utilizzare una pagina PHP che legge i contenuti della sessione, li memorizza in campi nascosti e quindi chiama una pagina ASP.NET che legge questi campi e li carica nella sessione ASP.NET.

In teoria è possibile.

0

Non è un grosso problema.
ASP applicazione dovrebbe fare un tre cose semplici:

  • Ricevere un cookie SessionID dal client
  • look per il file sess_<id> nella sessione PHP Salva percorso
  • implementare un PHP serializzare/funzioni unserialize leggere/scrivere dati di sessione.
-1

Oddio, forse un giorno si vedrà l'errore dei vostri modi, nel frattempo .....

Per impostazione predefinita, PHP scrive i suoi dati della sessione come un array serializzato in un file chiamato secondo la sessione. La sessione viene generalmente identificata da un cookie con nome PHPSESSID.

Così in PHP per leggere manualmente la sessione:

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

Il formato del file è molto semplice e facile da analizzare.

Tuttavia è abbastanza facile da implementare il proprio gestore di sessione PHP per scrivere i file in qualsiasi formato/a qualsiasi archivio che ti piace (dare un'occhiata alla auto-anteporre per come associare il codice revosed con ogni pagina senza dover riscrivere ognuno). O cambiare il nome del cookie utilizzato per memorizzare la sessione.

C.

+6

Ti dispiacerebbe spiegare "Oh mio Dio, forse un giorno vedrai l'errore delle tue vie, nel frattempo ..."? – citronas

0

Un modo più bello di appena hacking in meccanismi di stoccaggio seduta su entrambi i lati sarebbe la creazione di provider OpenID e collegare i consumatori OpenID di entrambe le applicazioni ASP.NET e PHP.

C'è molto codice esistente per farlo. Sarebbe più elegante e più incline alle soluzioni a basso livello. Come bonus è possibile utilizzare l'accesso OpenId integrato nel resto delle applicazioni aziendali e diventare un eroe aziendale.

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

2

Questa è una vecchia domanda, ma non pensavo che nessuna delle risposte attuali fosse completa.

In primo luogo, penso che sia una cattiva idea memorizzare i dati di sessione in un server di database come mysql o SQL Server. Il DB è una risorsa preziosa e non c'è davvero alcun motivo per ridurlo solo per i dati di sessione.

Se si desidera archiviare la sessione in un database simile, ci sono modi "migliori" per farlo, come assicurarsi che i dati della sessione siano sul proprio disco indipendente, ecc ... ma onestamente, io ancora sentirsi come se fosse un errore e limiterà la tua scalabilità.

Per la memorizzazione della sessione, si desidera utilizzare un semplice archivio chiavi/valori e, a mio parere, non è possibile battere memcached (anche se ho avuto anche fortuna con redis + nodejs).

memcached ha client disponibili per quasi tutte le lingue della terra: http://code.google.com/p/memcached/wiki/Clients

Quindi, in pratica tutto quello che dovete fare quando si utilizza memcached è generare un token pseudo-casuale per la chiave, e fare un memcached.set. Quindi archivia quella chiave in un cookie chiamato session-id o qualcosa del genere.

Il cookie ID di sessione può essere letto da qualsiasi linguaggio server, .net, php, python, qualunque sia - e il valore di sessione recuperato con un semplice memcached.get.

Scopri i docs memcached: http://code.google.com/p/memcached/wiki/NewStart

questo è un modo molto semplice e scalabile per fare le sessioni, e lavoreremo con quasi tutte le lingue/server.

+0

Invece di usare Memcache, potrei usare Microsoft Velocity per la comunicazione tra PHP e ASP.NET? Microsoft Velocity funzionerà con PHP? Se sì, quanto bene funziona Microsoft Velocity con PHP? – user1338998