session_gc

(PHP 7 >= 7.1.0, PHP 8)

session_gcOturum verisi çöpünü toplar

Açıklama

session_gc(): int|false

session_gc() oturum verisi çöpünü toplamak için kullanılır. PHP, öntanımlı olarak olasılık tabanlı oturum çöpçülüğü yapar.

Olasılığa dayalı çöpçülük bir dereceye kadar çalışır ancak birkaç sorunu vardır. 1) Düşük trafikli sitelerin oturum verileri tercih edilen süre içerisinde silinmeyebilir. 2) Yüksek trafikli sitelerin çöpleri çok sık toplanabilir. 3) Çöp toplama, kullanıcının isteği üzerine gerçekleştirilir ve kullanıcı çöp toplama sırasında gecikme yaşar.

Bu nedenle, çöp toplama işleminin düzenli aralıklarla (örneğin UNIX benzeri sistemlerde "cron" ile) yapılması önerilir. session.gc_probability yönergesine 0 atayarak olasılık tabanlı çöpçülük devre dışı bırakılmalıdır.

Bağımsız Değişkenler

Bu işlevin bağımsız değişkeni yoktur.

Dönen Değerler

session_gc() başarı durumunda silinen oturum verisi miktarını, aksi takdirde false döndürür

Eski kaydeteme işleyiciler silinen veri miktarını döndürmez, sadece başarı durumunu döndürür, bu durumda başarıyla silinen verinin miktarı daima 1 olur.

Örnekler

Örnek 1 - cron gibi bir görev yöneticisi ile session_gc() kullanımı

<?php
// Önemli: Bu betik http sunucusunun kullanıcı kimliğinde çalıştırılmalıdır.

// Oturum veri deposunu ilklendirmek için etkin oturum gerekir.
session_start();

// Çöpçüyü devreye sok
session_gc();

// session_gc() ile oluşturulmuş oturum kimliğini temizle
session_destroy();
?>

Örnek 2 - Kullanıcı erişimli betik ile session_gc() kullanımı

<?php
// Bilgi: session_gc() işlevinin görev yöneticisi betiği ile kullanılması
// önerilirse de aşağıdaki gibi de kullanılabilir.

// Son çöp toplama zamanının denetimi için
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;

session_start();
// Çöpçü sadece çöp toplama zamanı geldiğinde çalışsın.
// Her istekte session_gc() çağrısı kaynak israfı olur.
if (file_exists($gc_time)) {
if (
filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>

Ayrıca Bakınız

add a note

User Contributed Notes 2 notes

up
0
i dot carvallo at gmail dot com
21 days ago
Do not use:

if (session_gc() == false)
OR
if (!session_gc())

to evaluate if the garbage collector was triggered successfully since it also returns how many sessions it deleted, which can be 0 (and that evaluates to false with loose operators).

Sounds dumb, but it's a pitfall i fell into and it generated some confusion. Instead, use strict operator "===":

if (session_gc() === false)
up
0
ridaelkouri at gmail dot com
1 month ago
The session.gc() function does not seem to work alone. it deletes the data on the server but the data remains on the browser in the form of the cookie. the following code deletes the session files on the server but not on the browser.

ini_set('session.gc_maxlifetime', 10);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);

// Start the session
session_start();
$_SESSION['test'] = 'temporary data';

session_write_close();

// Wait for 15 seconds to ensure the session expires
sleep(15);

// Manually start the session again to trigger session handling
session_start();

session_gc();

// Check if the session data is still available
if (isset($_SESSION['test'])) {
echo "Session is still active.";
} else {
echo "Session expired and file deleted.";
}

but this code delete the session files on the server and also deletes the cookie as well as making the super global empty:

session_start();
$_SESSION['test'] = 'temporary data';

session_write_close();

// Wait for 15 seconds to ensure the session expires
sleep(15);

session_start();

// Manually trigger garbage collection
setcookie(session_name(), '', time() - 10);
$_SESSION = [];
session_gc();

// Check if the session data is still available
if (isset($_SESSION['test'])) {
echo "Session is still active.";
} else {
echo "Session expired and file deleted.";
}
To Top