Oturum
- İngilizcesi
- Session
- Okunuşu
- seşın
Günlük kullanımda iki ad da yaygın.
Kısaca
Oturum, sunucunun bir kullanıcıyı birçok istek boyunca hatırlama yöntemidir; genellikle veriler sunucuda tutulur ve tarayıcıya bir oturum kimliği verilir.
Web geliştirmede oturum (session) nedir?
HTTP durumsuzdur (stateless); yani her istek tek başına ele alınır ve sunucu önceki istekleri otomatik olarak hatırlamaz. Oturum bu hafızayı ekler: bir kullanıcı ile bir uygulama arasında, genellikle giriş yapmadan çıkış yapmaya kadar süren bir etkileşim dönemidir ve bu süre boyunca sunucu kullanıcının kim olduğunu ve alışveriş sepetinin içeriği gibi verileri takip eder.
Klasik sunucu taraflı yaklaşımda bir kullanıcı giriş yaptığında sunucu, kullanıcı kimliğini ve diğer verileri içeren bir oturum kaydı oluşturur, bunu bellekte, bir veritabanında ya da Redis gibi bir önbellekte saklar ve tarayıcıya bir cookie içinde uzun, rastgele bir oturum kimliği gönderir. Tarayıcı bu cookie'yi sonraki her isteğe otomatik olarak ekler ve sunucu oturumu bulmak için bu kimliği kullanır. Çıkış yapmak ya da zaman aşımını aşacak kadar etkinlik göstermemek oturumu siler.
Bir vestiyere benzer: paltonuzu bırakıp numaralı bir fiş alırsınız ve fiş yalnızca paltoyu tutan tezgâhla birlikte işe yarar. Bir oturum kimliğini çalan herkes kullanıcının kimliğine bürünebileceğinden, onu taşıyan cookie HttpOnly, Secure ve SameSite olarak işaretlenmeli, oturum sabitleme (session fixation) saldırılarını önlemek için girişten sonra yeni bir kimlik verilmelidir.
Oturumlar sıklıkla cookie'lerle ve token tabanlı kimlik doğrulamayla karıştırılır. Cookie yalnızca oturum kimliğini taşıyan araçtır; oturum verilerinin kendisi ise sunucuda durur. JWT gibi durumsuz token'larda kullanıcının bilgisi imzalı bir token'ın içinde taşınır; bu yüzden sunucunun hiçbir şeyi aramasına gerek kalmaz, ancak token süresi dolmadan iptal edilmesi çok daha zordur.
Önemli noktalar
- Oturumlar, bir sunucunun durumsuz HTTP istekleri boyunca bir kullanıcıyı hatırlamasını sağlar.
- Sunucu oturum verilerini saklar ve istemciye rastgele bir oturum kimliği verir.
- Oturum kimliği genellikle
HttpOnly,Securebir cookie içinde taşınır. - Oturum, kullanıcı çıkış yaptığında ya da hareketsizlik zaman aşımından sonra sona erer.
- Sunucu taraflı oturumları iptal etmek kolaydır; JWT gibi durumsuz token'ları iptal etmek değildir.
Örnek
// Using the express-session package
app.use(session({
secret: process.env.SESSION_SECRET, // signs the session ID cookie
resave: false, saveUninitialized: false,
cookie: { httpOnly: true, secure: true, sameSite: "lax", maxAge: 30 * 60 * 1000 },
}));
app.post("/login", async (req, res) => {
const user = await checkCredentials(req.body);
if (!user) return res.sendStatus(401);
req.session.userId = user.id; // stored on the server, not in the cookie
res.send("Logged in");
});
app.get("/me", (req, res) => res.json({ userId: req.session.userId }));Sık sorulan sorular
Oturum ile cookie arasındaki fark nedir?
Cookie, tarayıcıda saklanan ve isteklerle gönderilen küçük bir veri parçasıdır; oturum ise sunucuda saklanan, bir kullanıcının ziyaretine ait verilerdir. Çoğu kurulumda cookie yalnızca oturum kimliğini tutar ve sunucu oturumu bulmak için bu kimliği kullanır.
Kimlik doğrulama için oturum mu yoksa JWT mi kullanmalıyım?
Sunucu taraflı oturumlar basittir ve silinerek anında iptal edilebilir; bu da çoğu geleneksel web uygulamasına uygundur. JWT'ler her istekte arama yapmaktan kaçınır ve birçok servis tarafından paylaşılan API'lere uygun olabilir, ancak süreleri dolmadan iptal edilmeleri daha zordur.
Bir oturum ne kadar sürmelidir?
Riske bağlıdır. Bankacılık uygulamaları oturumları genellikle birkaç dakikalık hareketsizlikten sonra sonlandırır; düşük riskli uygulamalar ise kullanıcıları haftalarca açık tutabilir. Yaygın bir kalıp, kısa bir boşta kalma zaman aşımını mutlak bir azami ömürle birleştirir.
Sık karşılaştırılanlar
- Cookie vs OturumCookie, tarayıcının saklayıp her istekte gönderdiği küçük veridir; oturum ise sunucunun ziyaretçi için tuttuğu durumdur, cookie'deki bir kimlikle bulunur.
- JWT vs SessionJWT, kullanıcının kimliğini içinde taşıyan imzalı bir token'dır, sorgusuz doğrulanır; session ise oturumu sunucuda tutar, istemciye rastgele bir kimlik verir.
İlgili sayfalar
- CookieWeb Geliştirme, s. 7Cookie, bir web sitesinin tarayıcıdan saklamasını ve sonraki isteklerle geri göndermesini istediği, çoğunlukla oturum açık tutmak için kullanılan küçük veridir.
- Kimlik DoğrulamaGüvenlik, s. 19Kimlik doğrulama, bir kullanıcının, cihazın veya servisin gerçekten iddia ettiği kişi olduğunu, örneğin parola ya da passkey kontrol ederek doğrulama işlemidir.
- JWTGüvenlik, s. 17JWT, kullanıcı kimliği ve son kullanma zamanı gibi bilgileri taşıyan, imzalı ve kompakt bir token'dır; sunucunun oturum aramadan istekleri doğrulamasını sağlar.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- ÖnbellekBackend ve API'ler, s. 34Önbellek, sık kullanılan verilerin kopyalarını tutan hızlı ve geçici bir depolama katmanıdır; sonraki istekler yavaş işi tekrarlamadan hızla karşılanır.
- CSRFGüvenlik, s. 5CSRF, oturum açmış kullanıcının tarayıcısını güvenilir bir siteye istenmeyen istek göndermeye kandıran, sitenin de gerçek kullanıcı eylemi sandığı saldırıdır.
- Oturum Ele GeçirmeGüvenlik, s. 24Oturum ele geçirme, bir kullanıcının oturum kimliğini ya da token'ını çalarak veya tahmin ederek, parolasını bilmeden o kullanıcı gibi davranmaktır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin