Zend Framework Session
Indice
Introduzione
⤽
Session è una parola familiare nella programmazione PHP. Quando si costruisce un’applicazione complessa, di solito, coinvolgiamo una sessione. In PHP, conosciamo $ _SESSION. Rappresenta uno stato persistente e logico del dato e l’agente client utente (ad esempio, browser web).
A Zend Framework, possiamo usare
Le istanze di
Ancora confUSIONE? Non preoccupatevi, Nel prossimo post cercheremo di fare un po’ di pratica con la sessione con
Usando NamespaceA Zend Framework, possiamo usare
Zend_Session
. Zend_Session
gestisce, lato server, i dati memorizzati in $ _SESSION. E una importante classe che dobbiamo conoscere è Zend_Session_Namespace
. LA sessione del Namespace fornisce l’accesso ai dati di sessione tramite i namespace classico implementato logicamente come nome di gruppi in array associativi, con chiave di stringhe (simile al normale array in PHP). Qui di seguito, cito dal manuale Zend Framework:Le istanze di
Zend_Session_Namespace
sono oggetti che hanno metodi per accedere alle sezioni dello spazio dei nomi della variabile di sessione $_SESSION
. Il componente Zend_Session
avvolge l’esistente funzionalità di PHP per ext/session
con un interfaccia di amministrazione e gestione, inoltre fornisce un’API per le Zend_Session_Namespace
per farlo persistente nello spazio dei nomi della sessione. Zend_Session_Namespace
fornisce una interfaccia standardizzata, object-oriented, per lavorare con lo spazio dei nomi in modo persistente all’interno meccanismo sessione standard di PHP. Esiste il supporto per entrambi (anonimi e autenticati – ad esempio, “login”) spazi dei nomi della sessione. Zend_Auth
, il componente di autenticazione di Zend Framework
, utilizza Zend_Session_Namespace
per memorizzare alcune informazioni associate a utenti autenticati. Dal Zend_Session
si utilizza le normali funzioni di PHP ext/session
internamente, tutte le opzioni di configurazione familiare e impostazioni vengono applicate (vedi http://www.php.net/session), con i bonus come ad esempio la comodità di avere un’interfaccia object-oriented e un comportamento di default che fornisce le best practices e l’integrazione con lo Zend Framework. Quindi, uno standard identificativo di sessione in PHP, trasmessa dal cookie o all’interno degli URL, mantiene l’associazione tra un client e i suoi dati dello stato sessione.Ancora confUSIONE? Non preoccupatevi, Nel prossimo post cercheremo di fare un po’ di pratica con la sessione con
Zend Framework
. Inizieremo con Zend_Session_Namespace
.⤽
In questo post, impareremo a usare lo spazio dei nomi in una sessione in Zend Framework. Se non si ha familiarità con lo spazio dei nomi, non ti preoccupare. È semplice. Facciamolo.
Semplicemente, è come il nome dei gruppi di array associativi, con chiavi rappresentate da stringhe. Per fare pratica, usiamo il nostro esercizio precedente.
Ok, vogliamo contare il numero vi volte che si fa’ una richiesta di pagina particolare di form di un visitatore. Vedere l’immagine:
Per fare questo, aprire il file
Modificare
Alla linea 5, si definisce oggetto namespace. Lo spazio dei nomi, che abbiamo chiamato “ciaoMondo”. È come
Poi, alla riga 7, si verifica il valore di $ns->yourLoginRequest. È come
Ora, puntare il browser su
Poi, aggiornare la sua view a
Accedendo ai dati di SessionSemplicemente, è come il nome dei gruppi di array associativi, con chiavi rappresentate da stringhe. Per fare pratica, usiamo il nostro esercizio precedente.
Ok, vogliamo contare il numero vi volte che si fa’ una richiesta di pagina particolare di form di un visitatore. Vedere l’immagine:
Per fare questo, aprire il file
UserController.php
sotto la cartella application/controller
. Includere Zend/Session/Namespace.php
in prima linea dopo il delimitatore.
Copia codice
require_once 'Zend/Session/Namespace.php';
loginformAction()
per farlo diventare come segue:
Copia codice
public function loginFormAction()
{
$request = $this->getRequest();
$ns = new Zend_Session_Namespace('ciaoMondo');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
$_SESSION['ciaoMondo']
. Si può mettere il nome come MioNamespace, MiApplicazione, eccPoi, alla riga 7, si verifica il valore di $ns->yourLoginRequest. È come
$_SESSION['ciaoMondo']['yourLoginRequest']
. Successivamente, modificare loginform.phtml
sotto la cartella application/views/scripts/user
. Aggiornandolo diventa come segue:
Copia codice
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
Sei entrato in questa pagina: <?=$this->escape($this->request);?> volte.
<form method='post' action='<?=$this->escape($this->action);?>'>
<table>
<tr>
<td><?=$this->escape($this->username);?></td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td><?=$this->escape($this->password);?></td>
<td><input type='password' name='password'></td>
</tr>
</table>
<input type='submit' name='login' value='Login'>
</form>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/loginform
. Si può ottenere le schermate come l’immagine di sopra.Ok, prova di nuovo con userPageAction()
nelcontroller. L’aggiornamento apparirebbe come segue:
Copia codice
public function loginformAction()
{
$request = $this->getRequest();
$ns = new Zend_Session_Namespace('CiaoWorld');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
application/views/scripts/user/userpage.phtml:
Copia codice
<? include "header.phtml"; ?>
<h1>Ciao, <?=$this->escape($this->real_name);?></h1>
Sei entrato in questa pagina: <?=$this->escape($this->request);?> volte.
<a href='<?=$this->escape($this->urllogout);?>'>Logout</a>
<? include "footer.phtml"; ?>
⤽
In questo post, impareremo ad accedere ai dati di sessione. Ora, si spiega come accedere alla sessione.
Si prega di prestare attenzione al codice del precedente capitolo:
Da sopra, sappiamo come impostare la sessione in Zend Framework. Basta dare le proprietà come:
Ora, come accedere ai valori? Semplice:
Vedere tutti i valori del NamespaceSi prega di prestare attenzione al codice del precedente capitolo:
Copia codice
$ns = new Zend_Session_Namespace('ciaoMondo');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
Copia codice
$ns->yourLoginRequest = 1;
$ns->thisIsSession = "Oke";
$ns->nameOfSession = "MiaSession";
$ns->foo = 10;
Copia codice
echo $ns->yourLoginRequest;
echo $ns->thisIsSession;
echo $ns->nameOfSession;
echo $ns->foo;
⤽
Questo è un piccolo suggerimento per mostrare tutti i valori di uno spazio dei nomi. Come sappiamo, la sessione può avere un comportamento come un array. Quindi, possiamo mostrare valori come se fosse un array. Guardate questo esempio:
Ok, prova a testarlo. Abbiamo messo la sessione nella pagina loginform e nella pagina utente. Ora, vogliamo mostrare le statistiche di richiesta per quella pagina. Aprite il file “
Quindi, creare una view per quest’azione sul controller. Creare un file denominato “
Ok, prova ora a puntare il browser su
I valori dipendono dal numero di visite.
Blocco e sblocco del Namespace
Copia codice
$ns = new Zend_Session_Namespace('ciaoMondo');
foreach ($ns as $index => $value) {
echo "ns->$index = '$value';";
}
UserController.php
” sotto la cartella application/controller
. Aggiungere il seguente metodo:
Copia codice
public function statsAction()
{
$ns = new Zend_Session_Namespace('ciaoMondo');
foreach ($ns as $index => $value) {
echo "ns->$index = '$value';";
echo "<br />";
}
}
stats.phtml
” sotto la cartella application/views/scripts/user
. Lasciare la pagina vuota.Ok, prova ora a puntare il browser su
http://localhost/test/zend/ciaoMondo/web_root/user/stats
. Si può ottenere come ad esempio:
Copia codice
ns->yourLoginRequest = '2';
ns->yourUserPageRequest = '7';
⤽
Le sessioni del Namespace possono essere chiuse a chiave. Che cosa significa? Quando un namespace di una sessione è bloccata, non si può aggiornare o eliminare il valore della sessione. Sarà di sola lettura.
Possiamo usare
Per aprirlo, possiamo usare il metodo
Scadenza automaticaPossiamo usare
lock()
per bloccare lo spazio dei nomi. Poi, se volete controllare se è bloccato o no, possiamo usare il booleano isLocked()
. Guardate questo esempio:
Copia codice
public function loginFormAction()
{
$ns = new Zend_Session_Namespace('ciaoMondo');
$ns->lock();
if (!$ns->isLocked()) {
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
}
$request = $this->getRequest();
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
unLock()
.
Copia codice
$ns= new Zend_Session_Namespace('CiaoWorld');
// blocca la sessione e diventa di sola lettura
$ns->lock();
// sblocca la sessione di sola lettura
if ($ns->isLocked()) {
$ns->unLock();
}
⤽
Possiamo impostare un tempo limitato di validità per uno spazio dei nomi. Per questa caratteristica, realizzaremo unaa scadenza dello spazio dei nomi. Esempio, vogliamo contare il numero di richiesta di pagina da una persona in un minuto. Dopo 1 minuto, sarà contato come persona nuova. Quindi, il codice sarà come questo:
Proviamo ad modificare il metodo loginform del file
È possibile impostare solo in una chiave particolare (ad esempio,
Proviamo ad modificare il metodo loginform del file
UserController.php
sotto la cartella application/controller
. Aggiorniamo loginformAction()
:
Copia codice
public function loginformAction()
{
$ns = new Zend_Session_Namespace('ciaoMondo');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$ns->setExpirationSeconds(60);
$request = $this->getRequest();
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
yourLoginRequest
):
Copia codice
$ns->setExpirationSeconds(60,'yourLoginRequest');
Ancora nessun commento