- 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 tag se foloseste in <table> pentru a crea celula de tip "header"?
<thead> <th> <td>
<table><tr>
  <th>Title 1</th>
  <th>Title 2</th>
</tr></table>
Ce proprietate CSS seteaza distanta dintre randuri?
line-height word-spacing margin
.some_class {
  line-height: 150%;
}
Care functie deschide o noua fereastra.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){
  window.open("http://coursesweb.net/");
}
Indicati functia PHP care returneaza un array cu numele fisierelor si directoarelor dintr-un director.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
var_export($ar_dir);
Care din urmatoarele forme a verbului "sleep" (a dormi) se foloseste pentru viitor?
sleeping slept will sleep
He will sleep there.
- El va dormi acolo.
Care din urmatoarele forme a verbului "dormir" (a dormi) se foloseste pentru viitor?
dormido dormirá durmiendo
Él dormirá allí.
- El va dormi acolo.
Sesiuni - Tutorial Laravel

Last accessed pages

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (47096)
  2. Verbe modale - SHALL, SHOULD, OUGHT TO, WILL, WOULD, USED TO, BE TO, DARE (13094)
  3. Numerale, Numere in limba engleza - Numerals (21243)
  4. Anotimpurile si vremea (175)
  5. Obiectul Date - Lucru cu Data si Timp (205)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (2780)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1054)
  3. Gramatica limbii spaniole. Indrumator si prezentare generala (857)
  4. Exercitii engleza - English Tests and exercises - Grammar (830)
  5. Alphabet and Pronunciation - Alfabetul si pronuntia in limba engleza (722)