Raylardaki bir oturum nasıl boşaltılır / yok edilir?


Yanıtlar:


203

Her şeyi temizlemek için bir denetleyicide reset_session yöntemini kullanın.

reset_session

İşte bu yöntemle ilgili belgeler: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

İçinde saklanan tüm nesneleri temizleyerek ve yeni bir oturum nesnesi başlatarak oturumu sıfırlar.

İyi şanslar!


1
Veritabanı tabanlı oturumlar için (muhtemelen kullanmanız gerekir), bir sorgu aracılığıyla geçerliliğini sona erdirebilirsiniz: guides.rubyonrails.org/security.html#session-expiry
m33lky

44

raylarda oturum bir karma nesnesidir. Bu nedenle, hash'i temizlemek için mevcut olan herhangi bir işlev oturumlarla çalışacaktır.

session.clear

veya belirli anahtarların imha edilmesi gerekiyorsa:

session.delete(key)

Raylarda test edildi 3.2

katma

İnsanların bahsettiği session={}kötü bir fikir. session.clearLobati'nin yorumlarıyla ilgili olarak , session.clear'ın yaptıklarının ötesinde başka bir temizlik yaptığı için, muhtemelen reset_session [session.clear'dan] kullanmanız daha iyi görünüyor. Reset_session dahili olarak session.destroy'u çağırır , bu da diğer bazı şeylerin yanı sıra clear olarak adlandırılır.


Gdeglin tarafından önerilen yönteme karşı bu yöntemin yararları hakkında herhangi bir fikri olan var mı?
Peter Berg

3
Bu, diğer parametreleri korumak, ancak belirli bir anahtar-değer çiftini silmek istediğinizde kullanılabilir.
Lavixu

2
Bu, oturumu sıfırlamaz, yerel bir değişken atar. Oturumu sıfırlamak için asla bu tekniği kullanmayın: session = {}
alexspeller

4
Raylar dokümantasyon bölümünde, 5.1 Oturumu Erişme ve yeni bir oturum oluşturmak: Eğer kaldır komut eklenen anahtar / değer çiftlerini (bir kumandadan gelen eklenen Something ex) istiyorsanız reset_session kullanmayı önerir. Yalnızca ayarladığınız anahtar / değer çiftlerini sıfırlamak istiyorsanız, bu anahtarları sıfır olarak ayarlayın.
sargas

1
@barlop Kullanmanın reset_sessionötesinde başka bir temizlik yaptığı için muhtemelen kullanmanız daha iyi görünüyor session.clear. Dahili olarak, reset_sessionçağıransession.destroy , hangi kendisi çağırır cleardiğer bazı şeyler de .
lobati

6

bir kullanıcının oturumunu silmek için

session.delete(:user_id)

Dikkatli olun, kullanıcı kaydını veritabanından silebilirsiniz!
Arthur

2
@Arthur Bu doğru değil. Ancak oturumdan yalnızca: user_id anahtarını
sileceksiniz

5

Yalnızca belirli parametreleri temizlemek için şunları kullanabilirsiniz:

[:param1, :param2, :param3].each { |k| session.delete(k) }

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.