- 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.

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:


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

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care meta tag se foloseste pentru scurta descriere a paginii?
<meta content="..."> <meta description="..."> <meta http-equiv="...">
<meta name="description" content="70-160 caractere ce descriu continutul paginii" />
Ce proprietate CSS opreste efectul dat de "float"?
clear text-align position
#some_id {
  clear: both;
}
Clic pe metoda ce creaza un array cu toate elementele din pagina cu un anumit nume de tag.
getElementsByName() getElementById() getElementsByTagName()
var divs = document.getElementsByTagName("div");
var nr_divs = divs.length;
alert(nr_divs);
Indicati functia PHP ce returneaza numarul de elemente dintr-un array.
is_[) count() strlen()
$arr =[7, 8, "abc", 10);
$nri = count($arr);
echo $nri;        // 4
Indicati adverbul corespunzator adjectivului din paranteza in propozitia: "I live (happy)".
happly happily hapily
I live happily.
- Traiesc fericit (in mod fericit).
Indicati adverbul corespunzator adjectivului din paranteza in propozitia: "Vivo (feliz)".
felizamente felizmente felices
Vivo felizmente.
- Traiesc fericit (cu fericire).
Sesiuni - Tutorial Laravel

Last accessed pages

  1. Alphabet and Pronunciation - Alfabetul si pronuntia in limba engleza (22066)
  2. Gramatica limbii engleze - Prezentare Generala (72291)
  3. Prepozitii - Prepositions (7819)
  4. HTML5 - Elemente si atribute noi in formular (1341)
  5. HTML5 - Tag-uri Noi (1020)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (2613)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1259)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (827)
  4. Gramatica limbii spaniole. Indrumator si prezentare generala (807)
  5. Alphabet and Pronunciation - Alfabetul si pronuntia in limba engleza (744)