ASP.NET'te, Session.Abandon () yerine Session.Clear () 'ı ne zaman kullanmalıyım?


118

Hem Session.Clear () hem de Session.Abandon (), oturum değişkenlerinden kurtulur. Anladığım kadarıyla, Abandon () mevcut oturumu sonlandırıyor ve yeni bir oturumun oluşturulmasına neden olarak End ve Start olaylarının tetiklenmesine neden oluyor.

Bir kullanıcının oturumunu kapatmak gibi çoğu durumda Abandon () 'u çağırmak tercih edilir. Bunun yerine Clear () kullanacağım senaryolar var mı? Çok fazla performans farkı var mı?

Yanıtlar:


172

Session.Abandon() oturumu yok eder ve Session_OnEnd olayı tetiklenir.

Session.Clear()sadece tüm değerleri (içeriği) Nesneden kaldırır . Aynı anahtara sahip seans hala yaşıyor.

Yani, kullanırsanız Session.Abandon(), o belirli oturumu kaybedersiniz ve kullanıcı yeni bir oturum anahtarı alır. Örneğin, kullanıcı oturumu kapattığında kullanabilirsiniz.

Kullanım Session.Clear(), kullanıcı (örneğin tekrar giriş için kullanıcı istemiyorsanız) aynı oturumda kalan ve tüm oturum özgü verileri sıfırlamak olduğunu istiyorum.


1
Burada "Darin Dimitrov" un önerdiği gibi Clear () yerine RemoveAll () kullanmanın daha iyi olduğuna inanıyorum stackoverflow.com/a/3931344/713246
Bibhu

4
@Bibhu: RemoveAll () 'ın Clear ()' dan daha iyi olduğunu nasıl önerdi? Cevabında gördüğüm tek şey RemoveAll () 'ın Clear ()' ı çağırması ve işlevsel olarak aynı görünmesiydi.
Adam Miller

1
Yalnızca Session.Abandon()Windows Kimlik Doğrulaması kullanan dahili bir uygulamada 'oturum kapatma' olarak kullanılıyor - kullanıcıların yeniden kimlik doğrulaması yapması gerekmiyordu (Chrome, FF), ancak oturum iptal edildi ve gereksinimlerimi karşılayan yeni bir tane yayınlandı
brichins

13

Yalnızca bir kullanıcı oturumu kapattığında Session.Clear () kullanmak bir güvenlik açığı oluşturabilir. Web Sunucusu söz konusu olduğu sürece oturum hala geçerlidir. O halde koklamak, oturum kimliğini almak ve o oturumu ele geçirmek oldukça önemsiz bir konudur.

Bu nedenle, bir kullanıcının oturumunu kapatırken, oturumun yok edilmesi ve yeni bir oturum oluşturulması için Session.Abandon () kullanmak daha güvenli ve daha mantıklı olacaktır (oturum kapatma UI sayfası yeni oturumun bir parçası olsa bile, yeni oturumda herhangi bir kullanıcı ayrıntısı bulunmayacaktır ve yeni oturumun ele geçirilmesi, yeni bir oturuma sahip olmakla eşdeğer olacaktır, dolayısıyla sessiz olacaktır).


4
Boş bir oturumu kaçırmanın anlamı ne olabilir? Korsanın yine de oturum açması gerekir ve bunların yanlışlıkla yeni kullanıcıya sağlayacağı veri yoktur.
Trisped

3

Session.Abandonyukarıda belirtildiği gibi oturumu yok eder, bu yüzden birisinin oturumunu kapatırken bunu kullanmalısınız. Session.ClearBir e-ticaret web sitesinde alışveriş sepeti için iyi bir kullanım olacağını düşünüyorum . Bu şekilde, kullanıcı oturumu kapatmadan sepet temizlenir.


Peki ya Session.Abandonbelirli bir alışveriş sepetini temizlemek için kullanırsam ?
WTFZane

0

Bu sorunu yaşadım ve her ikisini de denedim, ancak "pageEditState" gibi saçmalıkları kaldırmakla yetinmek zorunda kaldım, ancak tekrar bakmam gerekmesi için kullanıcı bilgilerini kaldırmamaya karar verdim.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.