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.
| Soru | Türü | Ne kontrol eder? |
|---|---|---|
| 73 | Yönlendirme | Arayü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.
// 15 dakika sonra uyarısız çıkış
setTimeout(() => {
location.href = "/giris?zaman-asimi";
}, 15 * 60 * 1000);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.
<p aria-live="assertive">
Kalan süre: <span id="sayac">120</span> saniye
</p><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
- Understanding SC 2.2.1: Timing Adjustable (W3C), İngilizce, yeni sekmede açılır
- Erişilebilirlik blogu — Uygulamadan örnekler ve güncel yazılar.
- Erişilebilirlik kütüphanesi — Zaman aşımı, oturum süresi, canlı bölge ve diğer terimler.
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.
Sıradaki kriterler
Altyazılar (Önceden Kaydedilmiş)
Önceden kaydedilmiş ve hem ses hem görüntü içeren medyada, konuşmaların ve anlam taşıyan seslerin senkronize altyazılarla sunulmasını ister.
Kriteri inceleAnlamlı Sıralama
Okunma sırası anlamı etkileyen içeriğin, yardımcı teknolojilerin izlediği programatik sırada da doğru ve mantıklı bir düzende sunulmasını ister.
Kriteri inceleBağlantının Maksadı
Her bağlantının amacının, bağlantı metninden ya da bağlantıyla birlikte programatik olarak belirlenebilen bağlamından anlaşılabilmesini ister.
Kriteri incele