[英]How would I clear all rails sessions?
這是我的代碼:
if session[:firsttimestart].nil?
else
@firsttime = false
end
if @firsttime == true
initglobals()
end
session[:firsttimestart]=false
問題是當我關閉服務器並返回到應用程序時,會話 [:firsttimestart] 仍然是錯誤的。 它以某種方式將此變量存儲在我的系統中而沒有到期日期,因此不調用 iniglobals()。 我嘗試使用 rake tmp:clear 並且沒有用。 每次重新啟動服務器時,如何清除系統中正在使用的所有會話?
無論是 DB 還是 cookie 存儲,使用rake tmp:sessions:clear
如果您將會話存儲在數據庫中,那么
rake db:sessions:clear
在 Rails 4 中,接受的答案 ( rake db:sessions:clear
) 不再有效,因為 ActiveRecord::SessionStore 被提取到active_record-session_store
gem 中。 (見這里進一步解釋)
您現在可以安裝active_record-session_store
gem 並像在 Rails 3 中一樣使用rake db:sessions:clear
,或者創建一個自定義的 Rake 任務,如下所示:
namespace :db do
namespace :sessions do
desc "Clear ActiveRecord sessions"
task :clear => :environment do
sql = 'TRUNCATE sessions;'
ActiveRecord::Base.connection.execute(sql)
end
end
end
首先,nil 不是 == false,但是,nil 的計算結果為 false。 如果您不相信,請自行嘗試:
irb(main):001:0> nil == false
=> false
irb(main):002:0> nil == nil
=> true
這當然意味着:
irb(main):003:0> false.nil?
=> false
您可以通過以下方式清理您的代碼,因為似乎 @firsttime 從未在任何地方設置為 true。
unless session[:visited]
session[:visited] = true
initglobals
end
最后, rake tmp:sessions:clear 僅在您使用 ActiveRecordStore 時有效,如果您使用 CookieStore(這是默認設置)。 然后你需要清理你的cookies,或者使用reset_session。
我正在使用 Rails 4,以下解決方案對我有用,因為我不想每次啟動應用程序時都手動運行rake db:session:clear
。
在 /config/initializer/session_store.rb 中添加以下內容
ActiveRecord::SessionStore::Session.delete_all
這與 rake 命令相同,但在初始化程序級別完成。
最好是在部署時更改密鑰,所有 cookie 都會失效
從技術上講,您應該已經通過環境變量提供了一個。
http://guides.rubyonrails.org/security.html#custom-secrets
對於 rake 任務,看起來新的任務是
rails tmp:clear
在 Rails 5 中,如果使用 ActiveRecord:
ActiveRecord::SessionStore::Session.delete_all
或者更細粒度的:
# For example schedule this once a day`
ActiveRecord::SessionStore::Session.where(["updated_at < ?", 2.weeks.ago]).delete_all
至少對於存儲在 cookie 中的會話,您可以更改會話存儲密鑰:
初始值設定項/session_store.rb:
Rails.application.config.session_store :cookie_store, key: '_my_new_session_key'
根據 Rails API: ...更改您的 secret_key_base 將使所有現有會話無效
https://api.rubyonrails.org/v5.2.1/classes/ActionDispatch/Session/CookieStore.html
提出替代解決方案:您可以更改secret_key_base
- 如果身份驗證是在另一個應用程序中完成的。
rake db:schema:cache:clear
這會在使用 rails API 時清除緩存和所有會話,對於其他數據庫任務,請使用:
rake --tasks
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.