Railsでセッションを空にする/破壊する方法は?


回答:


203

すべてをクリアするには、コントローラでreset_sessionメソッドを使用します。

reset_session

このメソッドに関するドキュメントは次のとおりです。http//api.rubyonrails.org/classes/ActionController/Base.html#M000668

内部に格納されているすべてのオブジェクトをクリアして新しいセッションオブジェクトを初期化することにより、セッションをリセットします。

幸運を!


1
データベースベースのセッション(おそらく使用する必要があります)の場合は、次のクエリで期限切れにすることができます:guides.rubyonrails.org/security.html#session-expiry
m33lky

44

Railsのセッションはハッシュオブジェクトです。したがって、ハッシュをクリアするために使用できる関数はすべてセッションで機能します。

session.clear

または特定のキーを破棄する必要がある場合:

session.delete(key)

Rails 3.2でテスト済み

追加された

人々が言及してsession={}いるのは悪い考えです。についてsession.clear、Lobatiはコメントします。おそらくsession.clearよりも他のクリーンアップを行うため、reset_sessionは[session.clear]よりも使用した方が良いようです。内部的には、 reset_sessionはsession.destroy を呼び出しますがそれ自体がclearやその他のものを呼び出します。


この方法の長所とグデグリンが推奨する方法のメリットについて誰かが考えていることはありますか?
Peter Berg、

3
これは、他のパラメータを保持したいが、特定のキーと値のペアを1つ削除する場合に使用できます。
Lavixu 2014年

1
これはセッションをまったくリセットせず、ローカル変数を割り当てます。このテクニックを使用してセッションをリセットしないでください。セッション= {}
alexspeller

4
Railsのドキュメントのセクションに、5.1セッションへのアクセスは、新しいセッションを生成します。あなたが削除スクリプト-挿入されたキー/値ペア(コントローラから挿入サムシング元を)したい場合RESET_SESSIONを使用することを推奨しています。設定したキーと値のペアのみをリセットする場合は、それらのキーをnilに設定します。
sargas 14

1
@barlop reset_session何かを超えて他のいくつかのクリーンアップを行うので、を使用した方が良いと思われますsession.clear。内部的にreset_sessionsession.destroy、それ自体がclear他のいくつかのものを呼び出すを呼び出します
ロバティ2018

6

ユーザーのセッションを削除するには

session.delete(:user_id)

データベースからユーザーレコードを削除できることに注意してください。
Arthur、

2
@アーサーそれは真実ではありません。セッションからuser_idをキーとしませ全体セッション:しかし、あなたは唯一の削除だろう
Andión

5

特定のパラメーターのみをクリアするには、以下を使用できます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.