-
Accesare Date din Sesiune
-
Verificare daca o Sesiune exista
-
Stocare date in Sesiune
-
Stergere date din Session
-
Utilizare Sesiune in __construt()
Sesiunile sunt folosite pentru a retine si transmite date intre accesari de pagini. Laravel furnizeaza diferite drivere pentru stocare sesiuni:
file, cookie, apc, array, Memcached, Redis si
database.
- file - sesiunile sunt stocate in storage/framework/sessions.
- cookie - sesiunile sunt stocate in cookie-uri securizate si criptate.
- database - sesiunile sunt stocate intr-o baza de date.
- memcached / redis - sesiunile sunt stocate intr-un depozit de cache extern.
- array - sesiunile sunt stocate intr-un array PHP. Este folosit in timpul testelor si impiedica datele stocate in sesiune sa persistate.
Sesiuni in baza de date
Daca vreti sa folositi
o baza de date pt. sesiuni, va trebui sa creati un tabel care sa contina elementele sesiunii.
Mai jos aveti un exemplu de declaratie Schema pentru tabelul 'sesiunii':
Schema::create('sessions', function ($table){
$table->string('id')->unique();
$table->unsignedInteger('user_id')->nullable();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->text('payload');
$table->integer('last_activity');
});
Puteti folosi comanda Artisan
session:table pentru a genera automat aceasta migratie:
php artisan session:table
php artisan migrate
Accesare Date din Sesiune
Pentru a accesa
datele stocate in sesiune, se foloseste functia
session() sau metoda
session() a instantei
Request.
Accesare sesiune printr-o instanta Request
Dupa ce se obtine
instanta Request, se poate folosi metoda
session()->get('sesion_name') pentru a obtine datele sesiunii.
$value = $request->session()->get('key');
Puteti sa adaugati
o valoare default ca al doilea argument la metoda
get(), pentru a fi returnat daca numele de sesiune specificat nu exista.
Se poate folosi si o functie pt. valoarea default:
$value = $request->session()->get('key', 'default');
$value = $request->session()->get('key', function(){
return 'default';
});
Puteti folosi metoda
all() pentru a obtine un array cu toate datele din sesiune.
$sess = $request->session()->all();
Functia globala session()
Asemanator cu metoda
$request->session()->get('key'), functia
session() primeste un sir cu numele sesiunii, si optional, un al doilea argument pentru valoarea 'default':
Route::get('home', function(){
//Retrieve the value of the session with key 'name'
$value = session('name');
//Specifying a default value
$value = session('name', 'default');
});
Implicit, sesiunea Laravel expira dupa 120 de minute. Pentru a modifica durata de viata a sesiunii, deschideti fisierul config/session.php si schimbati valoare de la indexul 'lifetime'.
Verificare daca o Sesiune exista
Pentru a determina daca o Sesiune exista si
nu este nula, folositi metoda
use():
if($request->session()->has('users')){
//
}
Pentru a determina daca o Sesiune exista,
chiar daca valoarea ei este nula, puteti folosi metoda
exists():
if($request->session()->exists('users')){
//
}
Stocare date in Sesiune
Pentru a stoca date in sesiune, puteti folosi metoda
put() sau functia
session().
- Metoda
put() va lua doua argumente pentru '
nume' si '
valoare':
$request->session()->put('name', 'value');
- Cand functia
session() este apelata cu un array de perechi
nume=>valoare, acele valori vor fi adaugate in sesiune:
session(['key'=> 'value']);
Stergere date din Session
Pentru a sterge o sesiune, puteti folosi una din aceste metode:
- forget('key') - sterge sesiunea specificata.
$request->session()->forget('key');
- pull('key', 'default') - returneaza date din sesiune si apoi o sterge.
$value = $request->session()->pull('key', 'default');
- flush() - sterge toate sesiunile.
$request->session()->flush();
Daca vreti sa adaugati valoare unei sesiuni direct in template-ul blade, puteti folosi unul dintre aceste formate:
@if(session('key'))
{{session('key')}}
@endif
Or:
{{session('key', '')}}
Exemplu practic cu sesiune
1. Vom crea un controller numit
SessionController.
Copiati si salvati urmatorul cod in "
app/Http/Controllers/SessionController.php".
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SessionController extends Controller {
public function getSession(Request $request){
if($request->session()->has('my_name')) return "Session 'my_name' = ". $request->session()->get('my_name');
else return 'No data in session';
}
public function putSession(Request $request){
$request->session()->put('my_name','Mar Plo');
return 'Data has been added to session "my_name"';
}
public function deleteSession(Request $request){
if($request->session()->has('my_name')) $request->session()->forget('my_name');
return 'my_name session has been deleted.';
}
}
2. Acum, definim
Route pentru a testa SessionController.
Adaugati urmatorul cod in fisierul
routes/web.php:
Route::get('session/get','SessionController@getSession');
Route::get('session/put','SessionController@putSession');
Route::get('session/delete','SessionController@deleteSession');
3. Vizitati urmatorul URL pentru
a adauga date in sesiune:
//localhost:8000/session/put
- Rezultat:
Data has been added to session "my_name"
4. Vizitati urmatorul URL pentru
a obtine date din sesiune:
//localhost:8000/session/get
- Rezultat:
Session 'my_name' = Mar Plo
5. Vizitati urmatorul URL pentru
a sterge sesiunea "my_name":
//localhost:8000/session/delete
- Rezultat:
my_name session has been deleted.
6. Acum, daca vizitati din nou URL-ul:
//localhost:8000/session/get , va afisa:
No data in session
Utilizare Sesiune in __construt()
Sesiunile Laravel sunt initiate in middleware; sesiunea nu poate fi accesata direct in constructorul controller-ului pentru ca middleware-ul nu a rulat incat.
Pentru a folosi sesiune in __construt(), folositi metoda
$this->middleware(Callback) direct in constructor si lucrati cu sesiunea in functia "
Callback" trecuta ca argument.
public function __construct(){
$this->middleware(function($request, $next){
//Your code with Session ..
return $next($request); //<- this is required
});
}
- Documentatie:
Laravel - Sessions