如何在rails中清空/销毁会话?

tyb*_*103 127 session ruby-on-rails session-variables session-timeout

我似乎无法在任何地方找到它...如何在Rails中删除/销毁/重置/清空/清除用户的会话?不只是一个价值,而是整个事情......

Gde*_*lin 194

要清除整个事物,请在控制器中使用reset_session方法.

reset_session
Run Code Online (Sandbox Code Playgroud)

以下是此方法的文档:http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

通过清除存储在其中的所有对象并初始化新的会话对象来重置会话.

祝好运!


Lav*_*ixu 41

rails中的session是一个哈希对象.因此,任何可用于清除散列的函数都可以用于会话.

session.clear
Run Code Online (Sandbox Code Playgroud)

或者如果必须销毁特定密钥:

session.delete(key)
Run Code Online (Sandbox Code Playgroud)

测试在轨道3.2

添加

人们提到的session={}是一个坏主意.关于session.clear,Lobati评论 - 看起来你可能最好使用reset_session [比session.clear],因为它做了一些其他清理超出session.clear的做法.在内部, reset_session调用session.destroy,它本身也调用clear以及其他一些东西.

  • [Rails文档](http://guides.rubyonrails.org/action_controller_overview.html),在_5.1部分.如果要删除脚本插入的键/值对,则访问Session_建议使用reset_session(例如:从中插入的东西控制器)并生成一个新会话.如果只想重置您设置的键/值对,请将这些键设置为nil. (4认同)
  • 当您想要保留其他参数但删除一个特定键值对时,可以使用此选项. (3认同)
  • 这根本不会重置会话,它会分配一个局部变量。切勿使用此技术重置会话:session = {} (2认同)

vla*_*iov 5

要仅清除某些参数,您可以使用:

[:param1, :param2, :param3].each { |k| session.delete(k) }
Run Code Online (Sandbox Code Playgroud)


vjn*_*369 5

删除用户的会话

session.delete(:user_id)
Run Code Online (Sandbox Code Playgroud)

  • @Arthur 那不是真的。但是您只会从会话中删除 :user_id 键,而不是整个会话 (3认同)

小智 5

将此代码添加到您的 ApplicationController

def reset_session
  @_request.reset_session
end
Run Code Online (Sandbox Code Playgroud)

(不知道为什么上面没有人提到这段代码,因为它解决了我的问题) http://apidock.com/rails/ActionController/RackDelegation/reset_session