ASP.NET Core artımlı oturum durumu geçişine ASP.NET
Oturum Durumu
ASP.NET Framework'teki oturum durumu, ASP.NET Core'un sağlamadığı bir dizi özellik sağladı. Bağdaştırıcılar, ASP.NET Framework'ten Core'a güncelleştirmek için, oturum durumunun aynı davranışla System.Web
doldurulmasını sağlayan mekanizmalar sağlar. Çerçeve ve çekirdek arasındaki farklardan bazıları şunlardır:
- ASP.NET Framework bir oturum içindeki oturum kullanımını kilitler, bu nedenle bir oturumdaki sonraki istekler seri bir şekilde işlenir. Bu, bu garantilerin hiçbirini sağlamayan ASP.NET Core'dan farklıdır.
- ASP.NET Framework nesneleri otomatik olarak seri hale getirip seri durumdan çıkartır (bellek içinde yapılmadığı sürece). ASP.NET Core, belirli bir anahtarı depolamak için bir
byte[]
mekanizma sağlar. Herhangi bir nesne serileştirme/seri durumdan çıkarma, kullanıcı tarafından el ile yapılmalıdır.
Bağdaştırıcı altyapısı, herhangi bir oturum depolama sistemini uygulamak için kullanılabilecek iki arabirimi kullanıma sunar. Bu ifadeler şunlardır:
Microsoft.AspNetCore.SystemWebAdapters.ISessionManager
: Bu, bir HttpContext ve oturum meta verilerine geçirilen ve bir nesnenin döndürülmesini bekleyen tek birISessionState
yönteme sahiptir.Microsoft.AspNetCore.SystemWebAdapters.ISessionState
: Bu, oturum nesnesinin durumunu açıklar. Türün arkası HttpSessionState olarak kullanılır.
Serileştirme
Bağdaştırıcılar güçlü türdeki oturum durumuyla çalışma olanağı sağladığından, türleri seri hale getirebilmeli ve seri durumdan çıkarabilmeliyiz. Bu, aracılığıyla Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionKeySerializer
özelleştirilir.
aracılığıyla JsonSessionSerializerOptions
yapılandırılan varsayılan bir JSON uygulaması sağlanır:
RegisterKey<T>(string)
- Oturum anahtarını bilinen bir türe kaydeder. Bu, oturum durumunu doğru seri hale getirmek/seri durumdan çıkarmak için gereklidir. Için kayıt olmadığı bir anahtar bulunursa bir hata oluşturulur ve oturum kullanılamaz.
builder.Services.AddSystemWebAdapters()
.AddJsonSessionSerializer(options =>
{
// Serialization/deserialization requires each session key to be registered to a type
options.RegisterKey<int>("test-value");
});
Uygulamalar
Oturum durumu nesnesinin şu anda kullanıma sunulan iki uygulaması vardır ve her biri bazı özelliklerden ödün verilmektedir. Bir uygulama için en iyi seçenek, geçişin hangi bölümünde olduğuna bağlı olabilir ve zaman içinde değişebilir.
- Kesin olarak yazıldı: Bir nesneye erişme olanağı sağlar ve beklenen türe yayınlanabilir
- Kilitleme: Tek bir oturumdaki birden çok isteğin kuyruğa alınıp aynı anda oturuma erişmemesini sağlar
- Tek başına: SessionState'e başvuran sınıf kitaplıklarındaki kodu değiştirmekten kaçınmak için ASP.NET Framework ile ASP.NET Core arasında oturum paylaşmadığınızda kullanın
Kullanılabilir uygulamalar aşağıdadır:
Uygulama | Türü kesin olarak belirlenmiş | Kilitleniyor | Bağımsız |
---|---|---|---|
Uzak uygulama | ✔️ | ✔️ | ⛔ |
Sarmalanmış ASP.NET Çekirdek | ✔️ | ⛔ | ✔️ |
ASP.NET Core