Bu yazımızda oturum işlemleri için kullanılan session olayının Laravelde nasıl kullanıldığına değineceğiz.
Sessionlar kullanıcıdan alınan bilgilerin birden çok kullanılması için sunucu tarafında saklanan bilgilerdir. Mesela giriş bilgileri, sepet uygulaması buna en basit örneklerden biridir.
Laravel ile geliştirdiğimiz uygulamarda session bilgileri config/session.php dosyasında ayarlanır. Eğer projemizde session kullanacaksak bu alanı gözden geçirmemizde fayda var. Laravel ile proje oluşturduğumuzda varsayılan olarak standart yapı session konfigürasyon dosyası otomatik olarak gelir.
Session driver yapılandırma seçeneği her oturum için verilerin nerede saklanacağını belirtmemizi sağlar.
Session bilgilerini veritabanında oluşturmak için laravel bizden bir tablo oluşturmamızı isteyecektir. Örnek bir tablo yapısı aşağıdaki gibidir.
Öncelikle konsol ekranına şunları yazıyoruz.
php artisan session:table
Ardından karşımıza böyle bir migration dosyası çıkıyor. Dosya migration/tarih_create_sessions_table.php (tarih o günün tarihini yazıyor)
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSessionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->primary();
$table->string('ip_address', 45)->nullable();
$table->string('user_name', 45)->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('sessions');
}
}
up() metodunu ben sizlere anlatmak için 3 sütundan oluşturdum.
Daha sonra migration dosyamızı veritabanına eklemek için şu komutu yazıyoruz.
php artisan migrate
Artık sessionları veritabanına eklemek için hazırladığımız tablomuz hazır.
Session verilerine laravel projemizde 2 şekilde ulaşabiliriz. Bunlardan birincisi Request sınıfı ikincisi ise global fonksiyon kullanarak.
Varsayalım bir UserController.php adında bir controller dosyamız var. Bu controller dosyasının bir metodunda session bilgisine ulaşmak istiyoruz. Bunu şu şekilde yapabiliriz.
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function show(Request $request, $id)
{
$deger= $request->session()->get('isim');
//sessionda kayıtlı isim değerini ekrana yazar
}
}
get metodu ile session değerine ulaşmak istediğimizde bu metoda ikinci parametre olarak varsayılan bir değer atayabiliriz. Eğer sessionda böyle bir değer yoksa varsayılan olarak bu değeri alır ve hata çıkmasını engeller.
$value = $request->session()->get('key', 'default');
$value = $request->session()->get('key', function () {
return 'default';
});
Ayrıca session değerlerine ulaşmak için PHP metotlarından session() metodu kullanarak ulaşabiliriz.
Route::get('/home', function () {
// Key değeri ile ulaşma
$value = session('key');
// Varsayılan değer atama
$value = session('key', 'default');
// Sessionda bir veri parçası saklama
session(['key' => 'value']);
});
Tüm Session Değerlerine Ulaşma
all() metodu ile tüm oturum bilgilerine ulaşabiliriz.
$data = $request->session()->all();
Oturumda bir değerin olup olmadığını öğrenmek için has metodunu kullanabiliriz. Eğer değer var ve değeri null ise true döner bunu unutmayın.
if ($request->session()->has('isim')) {
//isim değeri varsa bura çalışır.
}
Eğer değer varsa ve değeri null ise bunu öğrenmek için exist metodunu kullanabiliriz.
if ($request->session()->exists('users')) {
//değer null değilse bura çalışır.
}
Sessiona değer eklemek için genellikle put metodu veya session global metodunu kullanırız.
$request->session()->put('key', 'value');
//global bu
session(['key' => 'value']);
push metodu ile sessiona yeni bir değer ekleyebiliriz.
$request->session()->push('kisi.meslek', 'developers');
pull metodu ile sessiondaki değeri silebiliriz.
$value = $request->session()->pull('key', 'default');
// Tek bir Değeri silme
$request->session()->forget('isim');
flush metodu ile tüm session verilerini temizleyebiliriz.
$request->session()->flush();
Bazı durumlarda tek kullanımlık sessionlar kullanmak isteyebiliriz. Mesela veri ekleme güncelleme ve silme işlemlerinden sonra kulanıcıya başarılı veya hata mesajları göstermek için. Laravelde flash sessionu şöyle kullanabiliriz.
$request->session()->flash('durum', 'Başarılı!');
admin demo
09-August-2021Güzel paylaşım teşekkürler.