Rails的session默認(rèn)為當(dāng)用戶關(guān)閉瀏覽器時(shí)終止
我們可以在config/environment.rb里設(shè)置它:
這需要一個(gè)插件,具體session設(shè)置請(qǐng)參考http://wiki.rubyonrails.org/rails/pages/HowtoChangeSessionOptions
這不是今天我們討論的重點(diǎn)
出于安全問題,有時(shí)候我們需要通知用戶你的session快超時(shí)了,如在線銀行系統(tǒng)等
讓我們看看在Rails里怎樣做
1,bank_account_controller.rb
該controller里定義了update_activity_time這個(gè)before_filter,它設(shè)置session的超時(shí)時(shí)間,這里為了demo我們?cè)O(shè)置為1分鐘
2,bank_account/index.rhtml
我們使用periodically_call_remote這個(gè)helper方法來每間隔1秒遠(yuǎn)程調(diào)用一次session_expiry這個(gè)action,并更新header這個(gè)div
3,bank_account/session_expiry.rhtml
這里顯示了我們的session還有多久會(huì)expire
4,signin/redirect.rjs
我們?cè)趕ession超時(shí)的時(shí)候自動(dòng)redirect到signin_url(需要我們?cè)趓outes.rb里定義)
我們可以在config/environment.rb里設(shè)置它:
- CGI::Session.expire_after 1.month
這需要一個(gè)插件,具體session設(shè)置請(qǐng)參考http://wiki.rubyonrails.org/rails/pages/HowtoChangeSessionOptions
這不是今天我們討論的重點(diǎn)
出于安全問題,有時(shí)候我們需要通知用戶你的session快超時(shí)了,如在線銀行系統(tǒng)等
讓我們看看在Rails里怎樣做
1,bank_account_controller.rb
- class BankAccountController < ApplicationController
- before_filter :update_activity_time, :except => :session_expiry
- def update_activity_time
- session[:expires_at] = 1.minutes.from_now
- end
- def session_expiry
- @time_left = (session[:expires_at] - Time.now).to_i
- unless @time_left > 0
- reset_session
- render '/signin/redirect'
- end
- end
- end
該controller里定義了update_activity_time這個(gè)before_filter,它設(shè)置session的超時(shí)時(shí)間,這里為了demo我們?cè)O(shè)置為1分鐘
2,bank_account/index.rhtml
- <html>
- <head>
- <%= javascript_include_tag :defaults %>
- </head>
- <body>
- <div id='header'></div>
- <%= periodically_call_remote :url => {
- :action => 'session_expiry'},
- :frequency => 1,
- :update => 'header' %>
- <div id='body'>Here's where your application's real functionality goes.</div>
- </body>
- </html>
我們使用periodically_call_remote這個(gè)helper方法來每間隔1秒遠(yuǎn)程調(diào)用一次session_expiry這個(gè)action,并更新header這個(gè)div
3,bank_account/session_expiry.rhtml
- <span style='color: read; font-weight: bold'>
- Your session will expire in <%= @time_left %> seconds
- </span>
這里顯示了我們的session還有多久會(huì)expire
4,signin/redirect.rjs
- page << "window.location = '#{signin_url}';"
我們?cè)趕ession超時(shí)的時(shí)候自動(dòng)redirect到signin_url(需要我們?cè)趓outes.rb里定義)
安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢】