Açıklama
Workerman 4.x sürümünden itibaren HTTP hizmet desteğini güçlendirdi. Talep sınıfı, yanıt sınıfı, oturum sınıfı ve SSE tanıtıldı. Workerman'ın HTTP hizmetini kullanmak istiyorsanız, Workerman 4.x veya daha yüksek sürümleri kullanmanızı şiddetle tavsiye ederiz.
Oturum Nesnesini Alma
$session = $request->session();
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$session = $request->session();
$session->set('name', 'tome');
$connection->send($session->get('name'));
};
// Worker'ı çalıştır
Worker::runAll();
Dikkat Edilmesi Gerekenler
- Oturum,
$connection->send()çağrısından önce işlenmelidir. - Oturum nesnesi yok edildiklerinde değişiklikler otomatik olarak kaydedilir, bu yüzden
$request->session()ile dönen nesneyi global bir dizi veya sınıf üyesi içinde saklamaktan kaçının, aksi takdirde oturum kaydedilemez. - Oturum varsayılan olarak disk dosyasında saklanır, daha iyi performans istiyorsanız Redis kullanmanızı öneririz.
Tüm Oturum Verilerini Alma
$session = $request->session();
$all = $session->all();
Döndürülen bir dizi. Eğer hiç oturum verisi yoksa, boş bir dizi döner.
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$session = $request->session();
$session->set('name', 'tom');
$connection->send(var_export($session->all(), true));
};
// Worker'ı çalıştır
Worker::runAll();
Oturumda Bir Değeri Alma
$session = $request->session();
$name = $session->get('name');
Eğer veri yoksa null döner.
Ayrıca get metoduna ikinci bir parametre olarak varsayılan bir değer geçirebilirsiniz, eğer oturum dizisinde karşılık gelen değer bulunamazsa varsayılan değer döner. Örneğin:
$session = $request->session();
$name = $session->get('name', 'tom');
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$session = $request->session();
$connection->send($session->get('name', 'tom'));
};
// Worker'ı çalıştır
Worker::runAll();
Oturum Saklama
Belirli bir veri saklamak için set metodunu kullanın.
$session = $request->session();
$session->set('name', 'tom');
set'in döndürdüğü bir değer yoktur, oturum nesnesi yok edildiğinde oturum otomatik olarak kaydedilir.
Birden fazla değer saklarken put metodunu kullanın.
$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);
Benzer şekilde, put'un da döndürdüğü bir değer yoktur.
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$session = $request->session();
$session->set('name', 'tom');
$connection->send($session->get('name'));
};
// Worker'ı çalıştır
Worker::runAll();
Oturum Verilerini Silme
Bir veya daha fazla oturum verisini silmek için forget metodunu kullanın.
$session = $request->session();
// Bir nesneyi sil
$session->forget('name');
// Birden fazla nesneyi sil
$session->forget(['name', 'age']);
Ayrıca sistem delete metodunu sağlar, forget metodundan farkı, delete sadece bir nesneyi siler.
$session = $request->session();
// $session->forget('name') ile eşdeğerdir.
$session->delete('name');
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$request->session()->forget('name');
$connection->send('ok');
};
// Worker'ı çalıştır
Worker::runAll();
Oturumda Belirli 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 karşılık gelen oturum yoksa, null döner.
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->session()->pull('name'));
};
// Worker'ı çalıştır
Worker::runAll();
Tüm Oturum Verilerini Silme
$request->session()->flush();
Döndürdüğü bir değer yoktur, oturum nesnesi yok edildiğinde oturum otomatik olarak depolamadan silinir.
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$request->session()->flush();
$connection->send('ok');
};
// Worker'ı çalıştır
Worker::runAll();
Belirli Bir Oturum Verisinin Varlığını Kontrol Etme
$session = $request->session();
$has = $session->has('name');
Yukarıdaki durumda, eğer karşılık gelen oturum yoksa veya karşılık gelen oturum değeri null ise false döner; aksi takdirde true döner.
$session = $request->session();
$has = $session->exists('name');
Yukarıdaki kod da oturum verisinin varlığını kontrol etmek için kullanılır, farkı ise eğer karşılık gelen oturum öğesi değeri null olduğunda da true döner.
Dikkat Edilmesi Gerekenler
Oturum kullanırken doğrudan sınıf örnek nesnelerini saklamanız önerilmez, özellikle kontrol edilemeyen sınıf örnekleri kullanıyorsanız, tersine mühendislik yaparken potansiyel risklere yol açabilir.