2012-02-05 11 views
9

Ho un sito Web www.example.com. Questo avrà più sottodomini che funzionano con una singola applicazione o programma. Ad esempio, login.example.com consentirà all'utente di accedere al sito mentre system.example.com consentirà all'utente di accedere a un sistema informativo, mentre forums.example.com consentirà all'utente di accedere ai forum.Condivisione di variabili SESSIONE tra più sottodomini

Potremmo dover passare le informazioni tra i sottodomini, come un id utente, o una preferenza utente, ecc. Come si fa a passare informazioni tra i sudomain usando le variabili SESSION?

EDIT: Mi piace questa idea:

come la prima cosa nello script:

ini_set('session.cookie_domain', '.example.com'); 
+1

Possibile duplicato? [Consenti alle sessioni PHP di trasferire ai sottodomini] (http://stackoverflow.com/questions/644920/allow-php-sessions-to-carry-over-to-subdomains) – Josh

+2

Hai intenzione di utilizzare la sessione SAME su tutti dei sottodomini o desideri che le informazioni sulla sessione vengano isolate dal sottodominio? Se si espande e si sposta un sottodominio in un altro server fisico, ciò potrebbe essere problematico se si condivide la sessione su tutti i domini. O dovresti passare alla memoria/memoria di sessione basata su database a cui tutti i server possono accedere. – drew010

+0

Ho intenzione di utilizzare la sessione SAME su tutti i sottodomini. Tuttavia un altro inconveniente può essere che ho più domini su un server. Cosa dovrei fare per mantenere le sessioni separate tra i domini regolari, ma tenerle solo per i sottodomini? –

risposta

13

PHP ID di sessione vengono salvate nei cookies. Per rendere disponibile un cookie in tutti i sottodomini è necessario assegnarlo al dominio radice. Quindi tutti i sottodomini otterranno l'id della sessione dal cookie e PHP potrà trovare la sessione utilizzando l'id della sessione passata.

Come si è visto, non vi resta che impostare il session.cookie_domain al dominio principale in php.ini file di

session.cookie_domain = ".example.com" 

Verificare inoltre manual per i diversi approcci utilizzati per impostare una voce ini.

+0

Cosa succede se si utilizza un servizio di hosting in cui si dispone di più di un dominio. Esempio sarebbe example1.com, example2.com, example3.com. Allora cosa faresti? –

+1

Aggiungi 'php_value session.cookie_domain .example.com' nel file' .htaccess' per ognuno dei tuoi domini –

+1

Mi dispiace quindi lo aggiungeresti come "php_value session.cookie_domain .example.com?" Corretta? –

9

1) i sottodomini dovrebbero utilizzare lo stesso percorso per salvare i file di sessione

2) modificare la

php.ini session.cookie_domain = ".example.com"

o .htaccess php_value session.cookie_domain .example.com

o all'interno dello script ini_set('session.cookie_domain', '.example.com');

+0

Cosa succede se si utilizza un servizio di hosting in cui si dispone di più di un dominio. Esempio sarebbe example1.com, example2.com, example3.com. Allora cosa faresti? –

+0

@KevinOluseunKarimu Nulla in base ai cookie, non funziona in questo modo. È possibile allegare l'ID di sessione ai collegamenti che portano a un altro dominio, in un altro dominio si ottiene questo ID di sessione e si avvia la sessione. Il requisito relativo alle cartelle di sessione condivise è ancora qui. – Cheery

+0

Come si ottiene l'ID sessiom per inserire i collegamenti? –

2

è possibile utilizzare i cookie. controllare il parametro path in setcookie() che rende tale cookie disponibile per l'intero dominio. gli svantaggi sono le persone che disattivano i cookie (modalità di navigazione private)

un altro metodo sarebbe il passing the sessionID around using links oi campi nascosti <input> (per i moduli).

poiché siti Web separati non condividono sessioni (per quanto ne so, poiché i sottodomini sono tecnicamente "luoghi diversi" l'uno dall'altro), non utilizzare sessioni da memorizzare sul lato server. invece, usa un database per gestire le tue sessioni. in questo modo, più siti possono condividere la stessa tabella di tracciamento della sessione.

+0

Cosa succede se si utilizza un servizio di hosting in cui si dispone di più di un dominio. Esempio sarebbe example1.com, example2.com, example3.com. Allora cosa faresti? –

7

ho trovato una soluzione al mio problema:

session_name("2620368ghwahw90w"); 
session_set_cookie_params(0, '/', '.mydomain.com'); 
session_start(); 

Questo sembra funzionare senza alcun problema. È un buon metodo a basso rischio per la sicurezza?

3

Prima di creare la sessione in file PHP, aggiunge questa linea alla prima riga:

<?php 
//session cross to sub domain 
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); 
0

Vado in giro con questo per un po 'di tempo e che cosa ha funzionato per me sta mettendo il codice qui sotto:

session_name("some_session_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();

in tutti i sottodomini che utilizzeranno le variabili di sessione. L'ho impostato all'inizio del mio file indice php e funziona. Spero che questo lo renderà chiaro.

Problemi correlati