WCAG 2.2.1 · A Seviyesi

Zaman Kontrolü

Süre sınırı olan işlemlerde kullanıcının süreyi kapatabilmesini, en az on katına kadar uzatabilmesini ya da süre dolmadan uyarılıp basit bir işlemle süre ekleyebilmesini ister.

Kısaca

Bir formu doldurmak bazı kullanıcılar için diğerlerinden çok daha uzun sürer. Ekran okuyucuyla formu dinleyen, tek parmakla yazan ya da metni anlamak için zamana ihtiyaç duyan biri, oturum süresi dolduğu için tüm girdiklerini kaybedebilir.

Bu kriter, süre sınırı olan işlemlerde şu üç seçenekten en az birini ister: kullanıcının süre sınırını kapatabilmesi, varsayılan sürenin en az on katına kadar uzatabilmesi veya süre dolmadan en az 20 saniye önce uyarılıp tek bir işlemle süreyi uzatabilmesi (en az 10 kez).

Neleri kapsar?

  • Oturum zaman aşımı: Hareketsiz kalındığında oturumun kapanması.
  • Form süre sınırları: Başvuru veya ödeme formlarının belirli sürede tamamlanması zorunluluğu.
  • Kendiliğinden ilerleyen içerik: Kullanıcının okumasını beklemeden yönlendiren sayfalar.
  • İstisnalar: Gerçek zamanlı etkinlikler (açık artırma gibi), sürenin uzatılmasının işlemi geçersiz kılacağı durumlar (bilet ayırma gibi) ve 20 saatten uzun süre sınırları.
  • Kapsam dışı notlar: Kendiliğinden hareket eden veya güncellenen içeriğin durdurulması bir sonraki kriterin (Duraklatma, Durdurma, Gizleme) konusudur.

Kimleri etkiler?

Ekran okuyucu kullanan kör kullanıcılar, form alanlarını tek tek dinledikleri için işlemleri daha uzun sürede tamamlar. Motor engelli kişiler yazmak için daha fazla zamana ihtiyaç duyabilir. Okuma güçlüğü, öğrenme güçlüğü veya bilişsel engeli olan kullanıcılar içeriği anlamak için zaman ister. Az gören kullanıcılar ekranı büyüttüklerinde sayfanın küçük bir bölümünü görür ve uyarıları geç fark edebilir.

Kontrol listesinde

Bu kriter, Bakanlığın A Seviyesi Kontrol Listesi'nde 73–74 numaralı soruları kapsar. Yönlendirme soruları sayfada ilgili içerik olup olmadığını belirler; yoksa liste sizi sonraki soruya geçirir. Aşağıdaki açıklamalar sorulardan alıntı değil, özetidir. Soruların tam metni için resmî listeye bakın.

BK 13 kapsamındaki sorular
SoruTürüNe kontrol eder?
73YönlendirmeArayüzdeki işlemlerde bir süre sınırı olup olmadığını sorar. Gerçek zamanlı etkinlikler, uzatmanın işlemi geçersiz kılacağı durumlar ve 20 saati aşan süreler istisnadır.
74★ Zorunluİstisna dışındaki süre sınırları için kapatma, en az on kat uzatma veya süre dolmadan en az 20 saniye önce uyarıp tek işlemle (en az 10 kez) uzatma seçeneklerinden en az birinin sunulup sunulmadığını kontrol eder.

Resmî kontrol listesini indirin (PDF), yeni sekmede açılır

Web için kod örnekleri

1. Habersiz oturum sonlandırma

Süre dolduğunda kullanıcıyı uyarmadan giriş sayfasına göndermek, girdiği tüm bilgilerin kaybolmasına neden olur.

Hatalı
// 15 dakika sonra uyarısız çıkış
setTimeout(() => {
  location.href = "/giris?zaman-asimi";
}, 15 * 60 * 1000);
Doğru
const SURE = 15 * 60 * 1000;
const UYARI_ONCESI = 2 * 60 * 1000; // en az 20 sn olmalı

let uyariZamanlayici, cikisZamanlayici;

function zamanlayicilariKur() {
  clearTimeout(uyariZamanlayici);
  clearTimeout(cikisZamanlayici);
  uyariZamanlayici = setTimeout(uyariGoster, SURE - UYARI_ONCESI);
  cikisZamanlayici = setTimeout(oturumuKapat, SURE);
}
zamanlayicilariKur();

2. Süre uzatma uyarısı

Uyarı, ekran okuyucunun hemen duyuracağı bir alertdialog olarak açılmalı ve tek bir düğmeyle süre uzatılabilmelidir.

<dialog id="sure-uyarisi" role="alertdialog"
        aria-labelledby="sure-baslik" aria-describedby="sure-aciklama">
  <h2 id="sure-baslik">Oturumunuz sona ermek üzere</h2>
  <p id="sure-aciklama">
    Güvenliğiniz için oturumunuz 2 dakika içinde kapanacak.
    Girdiğiniz bilgileri kaybetmemek için süreyi uzatın.
  </p>
  <button type="button" id="sure-uzat">Süreyi 15 dakika uzat</button>
  <button type="button" id="cikis-yap">Çıkış yap</button>
</dialog>

<script>
  const uyari = document.getElementById("sure-uyarisi");

  function uyariGoster() {
    uyari.showModal();
    document.getElementById("sure-uzat").focus();
  }

  document.getElementById("sure-uzat").addEventListener("click", async () => {
    await fetch("/oturum/yenile", { method: "POST" });
    uyari.close();
    zamanlayicilariKur();
  });
</script>

3. Saniye saniye geri sayım duyurusu

Geri sayımı her saniye aria-live ile duyurmak ekran okuyucu kullanıcısını boğar. Görsel sayaç ayrı, sesli duyuru seyrek olmalıdır.

Hatalı
<p aria-live="assertive">
  Kalan süre: <span id="sayac">120</span> saniye
</p>
Doğru
<p aria-hidden="true">
  Kalan süre: <span id="sayac">120</span> saniye
</p>
<p id="sure-duyuru" role="status" class="sr-only"></p>

<script>
  // Yalnızca 60 ve 30 saniye kala duyur
  function duyur(kalan) {
    if (kalan === 60 || kalan === 30) {
      document.getElementById("sure-duyuru").textContent =
        `Oturumun kapanmasına ${kalan} saniye kaldı.`;
    }
  }
</script>

4. Süre sınırını kapatma veya uzatma ayarı

Uzun formlarda kullanıcının başlamadan önce daha uzun bir süre seçmesine izin vermek de bir çözümdür. Seçenekler varsayılan sürenin en az on katına ulaşmalıdır.

<label for="oturum-suresi">Oturum süresi</label>
<select id="oturum-suresi">
  <option value="15">15 dakika (varsayılan)</option>
  <option value="60">1 saat</option>
  <option value="150">2,5 saat</option>
</select>

5. Girilen bilgileri korumak

Kriterin zorunlu bir parçası değildir; ancak süre dolsa bile verilerin kaybolmaması kullanıcıların işini büyük ölçüde kolaylaştırır. Hassas veriler tarayıcıda saklanmamalıdır.

// Kimlik numarası, parola gibi hassas alanlar hariç tutulur
const form = document.getElementById("basvuru-formu");
form.addEventListener("input", () => {
  const veri = Object.fromEntries(
    [...new FormData(form)].filter(([ad]) => !["tckn", "parola"].includes(ad))
  );
  try { sessionStorage.setItem("basvuru-taslak", JSON.stringify(veri)); } catch {}
});

Mobil için kod örnekleri

iOS (SwiftUI)

import SwiftUI

struct OturumGozetimi: View {
    @State private var uyariAcik = false
    @State private var dongu = 0
    let oturumuUzat: () -> Void
    let cikisYap: () -> Void

    var body: some View {
        BasvuruFormu() // Kendi bileşeniniz
            .alert("Oturumunuz sona ermek üzere", isPresented: $uyariAcik) {
                Button("Süreyi 15 dakika uzat") {
                    oturumuUzat()
                    dongu += 1 // Zamanlayıcıyı yeniden başlatır
                }
                Button("Çıkış yap", role: .destructive) { cikisYap() }
            } message: {
                Text("Oturumunuz 2 dakika içinde kapanacak. Bilgilerinizi kaybetmemek için süreyi uzatın.")
            }
            .task(id: dongu) {
                // Süre dolmadan 2 dakika önce uyarı (en az 20 sn olmalı)
                try? await Task.sleep(for: .seconds(13 * 60))
                uyariAcik = true
            }
    }
}

Android (Jetpack Compose)

import androidx.compose.material3.*
import androidx.compose.runtime.*
import kotlinx.coroutines.delay

@Composable
fun OturumGozetimi(oturumuUzat: () -> Unit, cikisYap: () -> Unit) {
    var uyariAcik by remember { mutableStateOf(false) }
    var dongu by remember { mutableIntStateOf(0) }

    LaunchedEffect(dongu) {
        delay(13 * 60 * 1000L) // Süre dolmadan 2 dakika önce
        uyariAcik = true
    }

    if (uyariAcik) {
        AlertDialog(
            onDismissRequest = { },
            title = { Text("Oturumunuz sona ermek üzere") },
            text = { Text("Oturumunuz 2 dakika içinde kapanacak. Bilgilerinizi kaybetmemek için süreyi uzatın.") },
            confirmButton = {
                TextButton(onClick = {
                    oturumuUzat()
                    uyariAcik = false
                    dongu++ // Zamanlayıcıyı yeniden başlatır
                }) { Text("Süreyi 15 dakika uzat") }
            },
            dismissButton = { TextButton(onClick = cikisYap) { Text("Çıkış yap") } }
        )
    }
}

Her iki örnekte de sunucu tarafındaki oturum süresinin, istemcideki uyarıyla uyumlu olması gerekir.

Nasıl test edilir?

  • Süre sınırlarını belirleyin: Oturum süresini, form sürelerini ve kendiliğinden yönlendiren sayfaları geliştirici ekiple birlikte listeleyin.
  • Bekleyin ve gözlemleyin: Bir formu açıp hareketsiz kalın. Süre dolmadan en az 20 saniye önce uyarı geliyor mu? Uyarı ekran okuyucu tarafından duyuruluyor mu?
  • Uzatmayı tekrarlayın: Uyarıdaki düğmeyle süreyi uzatın; bunun en az 10 kez yapılabildiğini doğrulayın.
  • Klavyeyle deneyin: Uyarı açıldığında odak düğmeye geliyor mu, Enter ile uzatılabiliyor mu?
  • Otomatik araçların sınırı: Otomatik araçlar meta http-equiv="refresh" ile yapılan zamanlı yönlendirmeleri bulabilir. Betikle veya sunucuyla yönetilen oturum sürelerini ise tespit edemez; bu kriter elle test edilmelidir.

Sık yapılan hatalar

  • Uyarı vermeden oturumu kapatmak: Kamu hizmeti formlarında en sık görülen sorundur.
  • Uyarıyı yalnızca görsel göstermek: Köşede beliren ve ekran okuyucuya duyurulmayan bir sayaç kör kullanıcıya ulaşmaz.
  • 20 saniyeden kısa uyarı süresi: Uyarıyı dinleyip düğmeyi bulmak zaman alır.
  • Uzatma sayısını sınırlamak: Süreyi yalnızca bir veya iki kez uzatmaya izin vermek yeterli değildir.
  • İstisnayı geniş yorumlamak: "Güvenlik gereği" ifadesi tek başına istisna değildir; güvenlik nedenli oturum süreleri de uyarı ve uzatma ile birlikte kullanılabilir.
  • Meta yenileme ile yönlendirme: <meta http-equiv="refresh"> ile birkaç saniye sonra başka sayfaya gitmek.

Kaynaklar

Kontrol listesi sürümü: V2.2.30.01 (2026). Bu sayfa bilgilendirme amaçlıdır; bağlayıcı metin için Aile ve Sosyal Hizmetler Bakanlığı'nın resmî kontrol listesini esas alın.

Sitenizde bu kriter nasıl görünüyor?

Ücretsiz tarama, bu kriterdeki sorunları ve diğerlerini Bakanlığın A Seviyesi Kontrol Listesi esas alınarak listeler.

Sitemi ücretsiz tara