Bagaimana cara mengosongkan / menghancurkan sesi di rel?

133

Sepertinya saya tidak dapat menemukannya di mana pun ... Bagaimana cara saya menghapus / menghancurkan / mereset / mengosongkan / menghapus sesi pengguna di Rails? Bukan hanya satu nilai tetapi semuanya ..

tybro0103
sumber

Jawaban:

203

Untuk menghapus semuanya gunakan metode reset_session di controller.

reset_session

Berikut dokumentasi tentang metode ini: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

Mereset sesi dengan membersihkan semua objek yang disimpan di dalam dan menginisialisasi objek sesi baru.

Semoga berhasil!

Gdeglin
sumber
1
Untuk sesi berbasis basis data (yang mungkin sebaiknya Anda gunakan), Anda dapat kedaluwarsa melalui kueri: guides.rubyonrails.org/security.html#session-expiry
m33lky
44

sesi dalam rel adalah objek hash. Karenanya setiap fungsi yang tersedia untuk membersihkan hash akan bekerja dengan sesi.

session.clear

atau jika kunci tertentu harus dihancurkan:

session.delete(key)

Diuji dalam rel 3.2

ditambahkan

Orang-orang yang disebutkan oleh session={}adalah ide yang buruk. Mengenai session.clear, komentar Lobati - Sepertinya Anda mungkin lebih baik menggunakan reset_session [daripada session.clear], seperti halnya beberapa pembersihan lainnya di luar apa yang dilakukan session.clear. Secara internal, reset_session panggilan session.destroy , yang dengan sendirinya panggilan jelas juga beberapa hal lainnya.

Lavixu
sumber
Adakah yang memiliki pemikiran tentang kelebihan metode ini vs yang direkomendasikan oleh Gdeglin?
Peter Berg
3
Ini dapat digunakan ketika Anda ingin mempertahankan parameter lain tetapi menghapus satu pasangan nilai kunci tertentu.
Lavixu
1
Ini tidak akan mengatur ulang sesi sama sekali, itu akan menetapkan variabel lokal. Jangan pernah menggunakan teknik ini untuk mengatur ulang sesi: session = {}
alexspeller
4
The dokumentasi Rails , pada bagian 5.1 Mengakses Sesi menyarankan untuk menggunakan reset_session jika Anda ingin menghapus skrip-memasukkan kunci / nilai pasangan (ex: Sesuatu dimasukkan dari controller) dan menghasilkan sesi baru. Jika Anda ingin mengatur ulang hanya pasangan kunci / nilai yang Anda atur, atur kunci-kunci itu menjadi nol.
sargas
1
@barlop Sepertinya Anda mungkin lebih baik menggunakan reset_session, seperti halnya beberapa pembersihan lainnya session.clear. Secara internal, reset_sessionpanggilansession.destroy , yang dengan sendirinya panggilan clearjuga beberapa hal lainnya .
lobati
6

untuk menghapus sesi pengguna

session.delete(:user_id)
vjnan369
sumber
Hati-hati, Anda dapat menghapus catatan pengguna dari database!
Arthur
2
@Arthur Itu tidak benar. Tapi Anda hanya akan menghapus kunci: user_id dari sesi dan bukan seluruh sesi
Andión
5

Untuk menghapus hanya parameter tertentu, Anda dapat menggunakan:

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

tambahkan kode ini ke ApplicationController Anda

def reset_session
  @_request.reset_session
end

(Jangan tahu mengapa tidak ada yang di atas hanya menyebutkan kode ini karena ini memperbaiki masalah saya) http://apidock.com/rails/ActionController/RackDelegation/reset_session

David Mesaros
sumber
Saya menemukan itu @_request.reset_sessiondan reset_sessionkeduanya berfungsi dan mungkin melakukan hal yang sama?
barlop