用于清除Rails中基于cookie的会话存储的命令

use*_*509 11 cookies session ruby-on-rails

我经常想清除Rails中的会话存储,特别是默认的基于cookie的会话存储.有些网站似乎暗示了这一点

rake tmp:sessions:clear
Run Code Online (Sandbox Code Playgroud)

完成这项任务,但似乎没有.清除基于cookie的会话存储的正确方法是什么?

the*_*fme 26

如果您使用基于Cookie的会话

您可以更改rails应用程序的secret_token.这将使所有现有会话无效.

rake secret
Run Code Online (Sandbox Code Playgroud)

然后将值复制到

RAILS_ROOT/config/initializers/session_store.rb
Run Code Online (Sandbox Code Playgroud)

而已.请记住在此之后重新启动您的应用;)

如果您使用基于数据库的会话

rake db:sessions:clear
Run Code Online (Sandbox Code Playgroud)

如果您使用基于文件的会话

rake tmp:sessions:clear
Run Code Online (Sandbox Code Playgroud)

  • 我不得不将值复制到secret_token.rb (4认同)

Joe*_*Dyk 9

更改会话cookie的名称.它不会删除旧的cookie,但它会强制每个人获得一个新的会话cookie.


Aug*_*aas 8

问题是cookie是客户端.显然,在服务器上运行rake任务不会删除访问过该网页的所有计算机上的cookie.

也许你可以session.clear以某种方式在你的控制器中使用?不过,你改变cookie密钥是对的.这样做会使属于旧密钥的任何会话无效.你必须从ActionController::StaleSession(或类似的东西)拯救,但它的工作.

  • 是的,正如我在评论中提到的那样,我错误地认为cookie只在客户端和服务器之间保留某种会话令牌,并且令牌也存储在服务器端以验证客户端的令牌或数据在服务器端.暂时我只是在我的代码中有一个解决方法来忽略会话.也许最简单的方法是切换到开发环境的数据库支持的cookie存储(我想清除会话仅用于开发目的). (2认同)