2010-04-23 12 views
7

Ho visto alcune risposte a questo su SOF ma la maggior parte di queste riguarda l'uso di sottodomini, di cui nessuno ha funzionato per me. Il comune è che l'uso di session.cookie_domain, che dalla mia comprensione funzionerà solo con i sottodomini.Sessioni condivise di PHP attraverso il dominio

Sono interessato a una soluzione che si occupa di domini completamente diversi (e include la possibilità di sottodomini). Purtroppo le scadenze del progetto sono quelle che sono, il tempo non è dalla mia parte, quindi mi rivolgo alle competenze e all'esperienza di SOF.

L'obiettivo del progetto corrente è di essere in grado di accedere a un sito che attualmente memorizza solo il user_id nella sessione e quindi essere in grado di recuperare questo valore mentre si trova su un dominio diverso all'interno dello stesso ambiente server. I dati della sessione vengono archiviati/recuperati da un database in cui la chiave primaria è session id.

Spero di trovare una soluzione "leggera" e "facile" per implementare la soluzione.

Il sistema utilizza un modello di progettazione del controller di visualizzazione modello interno, quindi tutte le richieste (compresi i domini diversi) vengono eseguite attraverso un singolo script di bootstrap. Usando il nome di dominio come variabile, questo determina quale contesto visualizzare all'utente.

Un'opzione che sembrava avere potenziale è l'uso di un'immagine nascosta e l'utilizzo del tag alt per impostare lo user id. Le mie prime impressioni suggeriscono che questo sembra immediatamente "troppo facile" (se possibile) e pieno di difetti di sicurezza. Disscuss?

Un'altra opzione che ho preso in considerazione è l'utilizzo di IP e User Agent per l'autenticazione, ma ancora una volta ritengo che questa non sarà un'opzione affidabile a causa di reti condivise e modifica degli indirizzi IP.

La mia terza opzione (e preferita) che ho considerato e non ancora visto in discussione è l'utilizzo di htaccess per ingannare l'utente nel pensare che si trovano su un dominio diverso quando infatti apache sta reindirizzando; qualcosa come

www.foo.com/index.php?domain=bar.com&controller=news/categoires/1
ma visualizza all'utente come
www.bar.com/news/categories/1

foo.com rappresenta il "dominio del sito principale", che tutte le richieste sono gestite attraverso e bar.com è ciò che l'utente pensa che accedono. La richiesta del controller determina la pagina e la vista richiesta. È possibile?

Ci sono altre opzioni? Pro e contro?

Grazie in anticipo !!!

+0

dispiace dimenticato di dire, ho attualmente in esecuzione il sistema a livello locale (con XAMPP). Sto usando una combinazione di nomi di dominio locali (file host modificato) e domini ospitati da fasthost da inoltrare al mio IP. Ho solo pensato che degno di menzione nel caso in cui ciò influenzi il mio attuale test. – bigstylee

risposta

-3

Per il beneficio per chiunque sia interessato a questa funzionalità, non ho una risposta semplice, temo. Google "Single Sign On" e tornerà con la tecnologia e alcune soluzioni disponibili.

Per quanto riguarda l'utilizzo di htaccess per nascondere il nome di dominio, questo non è possibile in quanto potrebbe essere utilizzato per attività dannose.

Ora ho implementato con successo un sistema per raggiungere i miei requisiti.

+1

Questa non è una risposta. Non ci dici cosa hai fatto. – Flimzy

0

Avete pensato di utilizzare session_set_save_handler. È possibile memorizzare le sessioni in un database e accedervi da qualsiasi dominio.

+1

Sto usando questo. Il problema è che il session_id generato da PHP è diverso per ogni dominio. – bigstylee

+0

non puoi identificare l'utente tramite l'ID di sessione? usa una colonna diversa nella tabella. avrai più righe per ogni utente ma puoi impostare una riga sullo stesso valore. Non l'ho mai fatto prima, semplicemente buttando roba là fuori. – Galen

+1

foo.com fornisce un ID di sessione di ABC123 e bar.com fornisce un ID di sessione di QWERTY. A meno che non paragoni IP/UserAgent non c'è modo (che io sappia) di sapere che ABC123 e QWERTY puntano allo stesso utente. La query del database che recupera i dati della sessione è SELECT * FROM sessions WHERE session_id = "% string". O mi sto perdendo il tuo punto? – bigstylee

0
  1. Definire un server di sessione principale (faccio questo in combinazione con memcached)

  2. uso Ajax/JSON (P) per richiedere una sessione da questo server, questo permette di condividere le sessioni su più domini

  3. riutilizzo questa sessione