English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In PHP, si utilizza $_SESSION per operare sulla sessione, mentre ThinkPHP fornisce la funzione di encapsulamento session() per la sessione. Solo questa funzione implements la funzione di aggiunta, rimozione, modifica e ricerca della sessione. Vediamo di seguito le sue applicazioni e implementazioni.
La definizione della funzione session() è definita nel file Common/functions.php.
Configurazione di sessione
La funzione session($name='', $value='') ha due parametri, $name è un array quando si configura la sessione. L'uso è il seguente:
$name = array( ‘name’ => ‘name’ ‘path’ => ‘/tmp/’ ‘expire’ => 0 ); session($name);
Questi sono impostati prima dell'apertura della sessione. Quando si definisce la funzione in ThinkPHP, si verifica prima se $name è un array, il che significa che si sta configurando la sessione, quindi si esegue il codice corrispondente.
Ecco il codice di implementazione:
se è un array($name)) { // Inizializzazione sessione chiamata prima di session_start se è impostato($name['prefix']), C('SESSION_PREFIX', $name['prefix']); se C('VAR_SESSION_ID') e è impostato($_REQUEST[C('VAR_SESSION_ID')]) { session_id($_REQUEST[C('VAR_SESSION_ID')]); } altrimenti se è impostato($name['id']) { session_id($name['id']); } se ('common' != APP_MODE) { // Altri modi potrebbero non supportare ini_set('session.auto_start', 0); } se è impostato($name['name']), session_name($name['name']); se è impostato($name['path']), session_save_path($name['path']); se è impostato($name['domain']), ini_set('session.cookie_domain', $name['domain']); se è impostato($name['expire']) { ini_set('session.gc_maxlifetime', $name['expire']); ini_set('session.cookie_lifetime', $name['expire']); } se è impostato($name['use_trans_sid']), ini_set('session.use_trans_sid', $name['use_trans_sid'] ? 1 : 0); if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0); if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0); if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']); if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']); if(isset($name['type'])) C('SESSION_TYPE',$name['type']); }
……
In ThinkPHP, per il sistema di archiviazione delle sessioni sono forniti due tipi di database: MySQL e memcache. Naturalmente, per impostazione predefinita viene utilizzato il salvataggio su file. Ecco il codice per determinare il tipo di archiviazione delle sessioni: if(C('SESSION_TYPE')) { // Lettura del driver di sessione $type = C('SESSION_TYPE'); // Richiamo del programma di guida MySQL $hander = new $class(); // Creazione dell'istanza del gestore // Registrazione del gestore session_set_save_handler( array(&$hander,"open"), array(&$hander,"close"), array(&$hander,"read"), array(&$hander,"write"), array(&$hander,"destroy"), array(&$hander,"gc") ); }
La configurazione del sistema di archiviazione delle sessioni è impostata tramite l'opzione di configurazione SESSION_TYPE.
SESSION_TYPE=>'Mysql' // Salvare la sessione nel database MySQL
Dopo aver completato la configurazione, se è stato impostato l'avvio automatico della sessione, il sistema avvierà automaticamente la sessione
// Avvia la sessione if(C('SESSION_AUTO_START')) session_start();
Se si desidera disattivare l'avvio automatico della sessione, impostare l'opzione SESSION_AUTO_START come segue:
SESSION_AUTO_START => false
Se è stato disattivato l'avvio automatico del sistema, è possibile avviare la sessione manualmente nei file pubblici del progetto o nel controller chiamando session_start() manualmente. Oppure utilizzare la funzione session(), il cui metodo di avvio è il seguente:
session('[start]');
Ecco come si implementa in ThinkPHP:
if('[pause]'==$name){ // Pausa la sessione session_write_close(); }elseif('[start]'==$name){ // Avvia la sessione session_start(); }elseif('[destroy]'==$name){ // Distrugge la sessione $_SESSION = array(); session_unset(); session_destroy(); }elseif('[regenerate]'==$name){ // Genera nuovamente l'id session_regenerate_id(); }
Assegnazione di sessione
L'assegnazione di sessione è abbastanza semplice, si utilizza direttamente:
session('name','onmpw');
Inoltre, i valori delle chiavi possono essere multipli e collegati con il punto '.'
session('name1.name2','onmpw'); // è equivalente a $_SESSION['name1']['name2'] = 'onmpw';
Ecco come si implementa l'assegnazione di sessione in ThinkPHP:
if(strpos($name,'.')){ list($name1,$name2) = explode('.', $name); if($prefix){ $_SESSION[$prefix][$name1][$name2] = $value; } $_SESSION[$name1][$name2] = $value; } } if($prefix){ $_SESSION[$prefix][$name] = $value; } $_SESSION[$name] = $value; } }
$prefix è configurato tramite l'opzione SESSION_PREFIX.
L'accesso ai valori di sessione
L'accesso ai valori di sessione è abbastanza semplice.
Prima di tutto, è necessario ottenere tutti i dati di sessione, ecco come si fa:
$values = session();
Alla fine si ottiene un array. Ecco come si implementa il codice in ThinkPHP:
if(''===$name){ // Ottenere tutti i dati di sessione return $prefix ? $_SESSION[$prefix] : $_SESSION; }
Poi è il momento di estrarre un singolo valore
$value1 = session('name'); // o $value2 = session('name1.name2');
Ecco il codice di implementazione:
if(strpos($name,'.')){ list($name1,$name2) = explode('.', $name); return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null; } return isset($_SESSION[$name])?$_SESSION[$name]:null; }
Eliminazione sessione
L'eliminazione di sessione si suddivide in svuotare sessione, distruggere sessione e eliminare un valore di sessione singola.
Parliamo prima di svuotare sessione. Svuotare sessione passa il valore null come parametro a $name
session(null); // svuotare sessione
Ecco il codice di implementazione:
if(is_null($name)){ // svuotare sessione if($prefix) { unset($_SESSION[$prefix]); } $_SESSION = array(); } }
Svuotare sessione significa solo eliminare i dati corrispondenti al file di sessione o alla tabella, ma il file esisterà ancora.
Distruggere sessione
session('[destroy]');
Ecco l'esempio di implementazione in ThinkPHP:
if('[destroy]'==$name){ // distruggere sessione $_SESSION = array(); session_unset(); session_destroy(); }
Diversamente da eliminare sessione e svuotare sessione, eliminare sessione distruggerà anche il file.
Infine, eliminare un valore di sessione singola. Ecco come si usa:
session('name',null);
eliminare un valore di sessione singola, impostare il valore del secondo parametro $value a null per eliminarla.
if(is_null($value)){ // eliminare sessione if(strpos($name,'.')){ list($name1,$name2) = explode('.', $name); if($prefix){ unset($_SESSION[$prefix][$name1][$name2]); } unset($_SESSION[$name1][$name2]); } } if($prefix){ unset($_SESSION[$prefix][$name]); } unset($_SESSION[$name]); } } }
Controlla la sessione
In sintesi, esponiamo una breve guida sull'controllo delle sessioni. Il controllo significa verificare l'esistenza di una variabile. Il controllo nativo delle variabili di sessione in PHP avviene così
isset($_SESSION['name']);
ThinkPHP utilizza la funzione session() così
session('?name'); // Verifica se una sessione è stata impostata
L'implementazione del codice utilizza anche il modo nativo di controllo
$name = substr($name, 1); if(strpos($name, '.')){ // Supporta array list($name1,$name2) = explode('.', $name); return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]); } return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]); }
Quasi una guida completa all'uso di tutte le funzioni della funzione session() e come ThinkPHP le implementa. Spero che il contenuto di questo articolo possa aiutarti durante l'uso di ThinkPHP.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale connessa. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente i contenuti sospetti di violazione del copyright.