Curs Php-mysql

- 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
Ce tag adauga imagine in pagina web?
<div> <img> <span>
<img src="http://coursesweb.net/imgs/webcourses.gif" width="191" height="63" alt="Courses-Web" />
Care din aceste coduri CSS afiseaza textul inclinat?
font-style: italic; text-decoration: underline; font-weight: 500;
#id {
  font-style: italic;
}
Clic pe functia jQuery care ascunde animat un element HTML.
click() hide() show()
$(document).ready(function() {
  $(".a_class").click(function(){ $(this).hide("slow"); });
});
Clic pe functia definita corect in PHP.
fname function() {} function fname() {} function $fname() {};
function fname($a, $b) {
  echo $a * $b;
}
Indicati forma pentru Prezent Perfect Continuu a verbului "to walk" (a merge).
have walked have been walking be walking
I have been walking for 5 hours.
- Merg pe jos de 5 ore.
Indicati Trecutul Nedefinit pentru verbul "ser" (a fi) la forma Yo.
será sería fui
Yo fui entrenador.
- Am fost antrenor.
Sesiuni - Tutorial Laravel

Last accessed pages

  1. Accentul si Pronuntia (27427)
  2. Proverbe, expresii si zicatori (23261)
  3. Liste HTML - UL, OL (10635)
  4. Verbe reflexive 1 (10796)
  5. Functii predefinite si Coduri PHP (3074)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1358)
  2. Exercitii engleza - English Tests and exercises - Grammar (1085)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (1079)
  4. Gramatica limbii engleze - Prezentare Generala (1030)
  5. Prezentul simplu - Exercitii si teste incepatori (887)