Bagaimana cara mengosongkan / menghancurkan sesi di rel?


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!


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.


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)

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) }

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.