webman oturum yönetimi
Örnek
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
$name = $request->get('name');
$session = $request->session();
$session->set('name', $name);
return response('hello ' . $session->get('name'));
}
}
$request->session();
ile Workerman\Protocols\Http\Session
örneğini elde edin ve örneğin yöntemlerini kullanarak oturum verilerini ekleyin, değiştirin veya silin.
Dikkat: oturum nesnesi yok olduğunda oturum verileri otomatik olarak kaydedilir, bu nedenle
$request->session()
ile dönen nesneyi küresel bir diziye veya sınıf üyelerine kaydedip oturumun kaydedilememesine neden olmayın.
Tüm oturum verilerini alma
$session = $request->session();
$all = $session->all();
Bu, bir dizi döndürür. Eğer hiç oturum verisi yoksa, boş bir dizi döndürülür.
Oturumdan bir değeri alma
$session = $request->session();
$name = $session->get('name');
Eğer veri yoksa, null döndürülür.
get
yöntemine ikinci bir parametre olarak bir varsayılan değer de verebilirsiniz. Eğer oturum dizisinde ilgili değer bulunamazsa varsayılan değer döner. Örneğin:
$session = $request->session();
$name = $session->get('name', 'tom');
Oturum verisi depolama
Bir veri öğesini saklamak için set
yöntemini kullanın.
$session = $request->session();
$session->set('name', 'tom');
set
bir değer döndürmez, oturum nesnesi yok olduğunda oturum otomatik olarak kaydedilir.
Birden fazla değeri saklamak için put
yöntemini kullanın.
$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);
Aynı şekilde, put
da bir değer döndürmez.
Oturum verilerini silme
Bir veya daha fazla oturum verisini silmek için forget
yöntemini kullanın.
$session = $request->session();
// Bir öğeyi sil
$session->forget('name');
// Birden fazla öğeyi sil
$session->forget(['name', 'age']);
Ayrıca sistem, delete
yöntemini sağlar. forget
yönteminden farkı, delete
yalnızca bir öğeyi silebilir.
$session = $request->session();
// $session->forget('name') ile aynıdır;
$session->delete('name');
Oturumdan bir değeri alma ve silme
$session = $request->session();
$name = $session->pull('name');
Aşağıdaki kod ile aynı etkiye sahiptir:
$session = $request->session();
$value = $session->get($name);
$session->delete($name);
Eğer ilgili oturum yoksa, null döner.
Tüm oturum verilerini silme
$request->session()->flush();
Bir değer döndürmez, oturum nesnesi yok olduğunda oturum depolamadan otomatik olarak silinir.
İlgili oturum verisinin var olup olmadığını kontrol etme
$session = $request->session();
$has = $session->has('name');
Yukarıdaki durum, ilgili oturum yoksa veya ilgili oturum değeri null ise false döndürür, aksi takdirde true döner.
$session = $request->session();
$has = $session->exists('name');
Yukarıdaki kod da oturum verisinin var olup olmadığını kontrol etmek için kullanılır, farkı ilgili oturum öğe değeri null olduğunda da true döndürmesidir.
Yardımcı fonksiyon session()
webman, aynı işlevselliği sağlamak için session()
yardımcı fonksiyonunu sunar.
// Oturum örneğini almak
$session = session();
// Eşdeğerdir
$session = $request->session();
// Bir değer almak
$value = session('key', 'default');
// Eşdeğerdir
$value = session()->get('key', 'default');
// Eşdeğerdir
$value = $request->session()->get('key', 'default');
// Oturuma değer atamak
session(['key1'=>'value1', 'key2' => 'value2']);
// Eşdeğerdir
session()->put(['key1'=>'value1', 'key2' => 'value2']);
// Eşdeğerdir
$request->session()->put(['key1'=>'value1', 'key2' => 'value2']);
Konfigürasyon dosyası
Oturum konfigürasyon dosyası config/session.php
içindedir, içeriği aşağıdaki gibi görünür:
use Webman\Session\FileSessionHandler;
use Webman\Session\RedisSessionHandler;
use Webman\Session\RedisClusterSessionHandler;
return [
// FileSessionHandler::class veya RedisSessionHandler::class veya RedisClusterSessionHandler::class
'handler' => FileSessionHandler::class,
// handler FileSessionHandler::class ise değeri file,
// handler RedisSessionHandler::class ise değeri redis
// handler RedisClusterSessionHandler::class ise değeri redis_cluster yani redis kümesi
'type' => 'file',
// Farklı handler'lar farklı konfigürasyon kullanır
'config' => [
// type file olduğunda konfigürasyon
'file' => [
'save_path' => runtime_path() . '/sessions',
],
// type redis olduğunda konfigürasyon
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => '',
'timeout' => 2,
'database' => '',
'prefix' => 'redis_session_',
],
'redis_cluster' => [
'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
'timeout' => 2,
'auth' => '',
'prefix' => 'redis_session_',
]
],
'session_name' => 'PHPSID', // session_id'yi saklamak için çerez adı
'auto_update_timestamp' => false, // oturumu otomatik olarak yenilemek için, varsayılan kapalı
'lifetime' => 7*24*60*60, // oturumun süresi
'cookie_lifetime' => 365*24*60*60, // session_id'nin çerezinin süresi
'cookie_path' => '/', // session_id'nin çerez yolu
'domain' => '', // session_id'nin çerez alanı
'http_only' => true, // httpOnly'yi açıp kapatmak için, varsayılan açık
'secure' => false, // yalnızca https altında oturumu açmak için, varsayılan kapalı
'same_site' => '', // CSRF saldırılarını ve kullanıcı takibini önlemek için, seçenekler: strict/lax/none
'gc_probability' => [1, 1000], // oturumun geri kazanım olasılığı
];
Güvenlik ile ilgili
Oturum kullanırken, sınıfın örnek nesnelerini doğrudan saklamanız önerilmez, özellikle kontrol edilemeyen sınıf örnekleri kullanılıyorsa, tersine serileştirme sırasında potansiyel riskler olabilir.